我有一个XML文档,其中包含有关父实体的用户定义信息。我想创建一个XSLT将XML转换为当前用户定义的列表。 XSLT将需要忽略已移除的元素,添加新元素并保留用户定义的元素顺序。使用XSLT添加和删除XML元素
例输入XML:
<InventoryProperties>
<InvProp Name="Weight"
Type="Text"
Alignment="Right">12500</InvProp>
<InvProp Name="Length"
Type="Text"
Alignemnt="Right">20.2</InvProp>
<InvProp Name="GVW"
Type="Text"></InvProp>
</InventoryProperties>
所以,现在的用户已经改变了收集的数据点,并且不希望GVW了,但增加了身高体重和体长之间。什么到目前为止,我所做的就是这样来我想要的元素和离开我不再需要的元素背后:
<xsl:apply-templates select="InventoryProperties/InvProp[@Name = 'Weight']"/>
重复的是当前定义的每个领域。这工作正常,并保持预期的顺序。对于加入新的元素,我想是这样的:
<xsl:apply-templates select="InventoryProperties[not(InvProp[@Name='Height'])]"/>
<xsl:template name="HeightTemplate"
match="InventoryProperties[not(InvProp[@Name='Height'])]">
<xsl:apply-templates select="@*[not(name()='Height')]|node()"/>
<Property LabelText="HelloWorld" />
</xsl:template>
而且这几个其他版本,但没有什么是生产什么,我想这将是:
<InventoryProperties>
<Property LabelText="Weight"
ControlType="Text">12500</Property>
<Property LabelText="Height"
ControlType="Text"></Property>
<Property LabelText="Length"
ControlType="Text">20.2</Property>
</InventoryProperties>
没有理由元素和属性名称的改变,我只是想分清什么是工作,什么不是。
我不确定是否正确理解这一点。样式表(在你的例子中)应该忽略Name =“GVW”的元素,并在Name后面添加一个名称为“Height”的元素,如果它还没有一个呢? –
@ hr_117 - 是的,这是正确的。在这个例子中,Xml是在最新定义之前保存的,所以当数据现在呈现给最终用户时,我们需要显示当前数据点,但不包括GVW,但是包括Height。 –