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>

数据区/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 身份转换添加一个额外的匹配模板

<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 回答