0

ソースxmlに要素を追加したい。

例: ソース

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <DataArea>
        <PurchaseOrder>
            <PurchaseOrderLine>
                <DocumentReference type="customersReference1">
                    <DocumentID>
                        <ID>23423</ID>
                    </DocumentID>
                </DocumentReference>
                <Item>
                    <CustomerItemID>
                        <!-- ArtNr -->
                        <ID>444</ID>
                    </CustomerItemID>
                </Item>
                <Quantity unitCode="PCE">17.3</Quantity>
            </PurchaseOrderLine>
        </PurchaseOrder>
    </DataArea>

要素を追加したい

<LineNumber>10</LineNumber>

DataArea/PurchaseOrder/PurchaseOrderLine/

したがって、最初の解決策は、元のxmlからすべてのデータをコピーしてからLineNumber

<xsl:copy>
    <xsl:apply-templates select="DocumentReference"/>
    <xsl:apply-templates select="Item"/>
    <xsl:apply-templates select="Quantity"/>
        <!-- ADD HERE LINENUMBER -->
</xsl:copy>

LineNumberすべての要素を手動でコピーせずに追加するにはどうすればよいですか?

4

1 に答える 1

2

これは簡単で、標準の XSLT Identity Transform に一致するテンプレートを追加するだけです。

<xsl:template match="PurchaseOrderLine">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
      <LineNumber>10</LineNumber>
   </xsl:copy>
</xsl:template>

これは要素とそのすべての子をコピーするだけですが、新しい LineNumber 要素も追加します。

ここに完全な XSLT があります

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="PurchaseOrderLine">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
         <LineNumber>10</LineNumber>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

XML に適用すると、以下が出力されます。

<DataArea>
   <PurchaseOrder>
      <PurchaseOrderLine>
         <DocumentReference type="customersReference1">
            <DocumentID>
               <ID>23423</ID>
            </DocumentID>
         </DocumentReference>
         <Item>
            <CustomerItemID><!-- ArtNr -->
               <ID>444</ID>
            </CustomerItemID>
         </Item>
         <Quantity unitCode="PCE">17.3</Quantity>
         <LineNumber>10</LineNumber>
      </PurchaseOrderLine>
   </PurchaseOrder>
</DataArea>
于 2012-09-26T08:03:50.740 に答える