我有一個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。 –