私の目的は、現在の子要素の 1 つが条件と等しい場合に、XML ファイルに新しい要素を追加することです。その条件が満たされない場合は、元の XML ファイルの現在のテンプレートを引き続き使用します。
以下に、現在 2 つの注文済みアイテムを含むサンプル XML ファイルがあります。XML ファイルの全体的な構造は同じままですが、顧客の注文は各 XML ファイルで一意であるため、注文されるアイテムの数は可変であり、追加の AlbumOrderItems を追加できます。
元の 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 というタイトルの 2 つの新しい追加要素が含まれています。これらは両方とも最初の 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 と等しい場合に AlbumOrderItem にノードを追加し、複数の AlbumOrderItems セクションを説明するために、任意の助けをいただければ幸いです。
現在の 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>