如果当前子元素之一等于条件,我的目标是向 XML 文件添加一个新元素。如果不满足该条件,则继续使用原始 XML 文件的当前模板。
我有一个示例 XML 文件,它下面当前包含 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>
如果 ProductCategory 等于“ALBUM”,则向 AlbumOrderItem 添加一个新元素。下面的示例 XML 输出包含两个新添加的元素,标题为:Package 和 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>