我的目標是在XML文件中添加一個新元素,前提是其中一個子元素等於某個條件。如果不符合該條件,請繼續使用原始XML文件的當前模板。使用XSL添加基於XML參數的節點
我有一個示例XML文件,當前containts 2訂購的項目下面。 XML文件的整體結構將保持不變,但訂購的項目數量是可變的,可以添加額外的AlbumOrderItems,因爲客戶訂單對每個XML文件都是唯一的。
原始XML文件
<AlbumOrder>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<NumItems>2</NumItems>
<DateTime>03/14/2013 12:16 AM</DateTime>
<AlbumOrderItem>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<PartnerOrderItemID>1</PartnerOrderItemID>
<DateTime>03/14/2013 12:16 AM</DateTime>
<ProductCategory>ALBUM</ProductCategory>
<Quantity>2</Quantity>
<ShipAddress>
<FirstName>Joe</FirstName>
<LastName>Black</LastName>
</ShipAddress>
</AlbumOrderItem>
<AlbumOrderItem>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<PartnerOrderItemID>2</PartnerOrderItemID>
<DateTime>03/14/2013 12:16 AM</DateTime>
<ProductCategory>CARD</ProductCategory>
<Quantity>1</Quantity>
<Package>10</Package>
<NumPrints>10</NumPrints>
<ShipAddress>
<FirstName>Joe</FirstName>
<LastName>Black</LastName>
</ShipAddress>
</AlbumOrderItem>
</AlbumOrder>
如果產品分類等於「ALBUM」,然後將新元素添加到AlbumOrderItem.The示例XML輸出下面包含標題爲兩個新的添加元素: 打包和NumPrints 這些都是既加到第一AblumOrderItem
希望的輸出XML
<AlbumOrder>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<NumItems>2</NumItems>
<DateTime>03/14/2013 12:16 AM</DateTime>
<AlbumOrderItem>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<PartnerOrderItemID>1</PartnerOrderItemID>
<DateTime>03/14/2013 12:16 AM</DateTime>
<ProductCategory>ALBUM</ProductCategory>
<Quantity>2</Quantity>
<Package>XY</Package> ****NODE to add
<NumPrints>Z</NumPrints> ****NODE to add
<ShipAddress>
<FirstName>Joe</FirstName>
<LastName>Black</LastName>
</ShipAddress>
</AlbumOrderItem>
<AlbumOrderItem>
<PartnerCode>ABC Company</PartnerCode>
<AffiliateCode>abcpro</AffiliateCode>
<PartnerOrderID>449</PartnerOrderID>
<PartnerOrderItemID>2</PartnerOrderItemID>
<DateTime>03/14/2013 12:16 AM</DateTime>
<ProductCategory>CARD</ProductCategory>
<Quantity>1</Quantity>
<Package>10</Package>
<NumPrints>10</NumPrints>
<ShipAddress>
<FirstName>Joe</FirstName>
<LastName>Black</LastName>
</ShipAddress>
</AlbumOrderItem>
</AlbumOrder>
我我目前正在處理下面的文件,但似乎並未應用所需的更改。它似乎只是在默認的XSL模板/規則上產生了原始XML的完整副本,可能基於 。我不確定下面是否有語法問題,特別是模板匹配參數。我也不確定如何通過整個XML文件中的所有ProductCategory元素來搜索或循環 。如果您有任何問題,請告訴我。如果ProductCategory等於ALBUM並且考慮多個AlbumOrderItems部分,任何幫助都將非常感謝,以便將節點添加到AlbumOrderItem。
當前XSL腳本
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="TESTname">PACK_TEST</xsl:param>
<xsl:param name="TESTvalue"><xsl:value-of select="AlbumOrder/AlbumOrderItem/Package"/>
</xsl:param>
<xsl:output method="xml"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AlbumOrderItem[ProductCategory=Album]">
<xsl:element name="{$TESTname}"><xsl:value-of select="$TESTvalue"/></xsl:element>
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
</xsl:stylesheet>
不錯!現在正在添加基於語法更新的新節點,但我有一個新問題。現在, AlbumOrderItem>的整個第一個結束標記將被刪除或被刪除。 – loto33 2013-03-18 18:43:42
這是因爲您需要在模板內容周圍設置''。 –
JLRishe
2013-03-18 19:47:01
感謝您的意見。一切都在工作! – loto33 2013-03-19 20:54:41