我有一个 XML 文档,其中包含有关父实体的用户定义信息。我想创建一个 XSLT 将 XML 转换为当前用户定义的列表。XSLT 将需要忽略已删除的元素、添加新元素并保持用户定义的元素顺序。
示例输入 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,而是在 Weight 和 Length 之间添加了 Height。到目前为止,我所做的是获得我想要的元素并留下我不再需要的元素:
<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>
没有理由更改元素和属性名称,我只是试图整理哪些有效,哪些无效。