【问题标题】:Add one element to the parent element with xslt without copying使用 xslt 向父元素添加一个元素而不复制
【发布时间】:2012-09-17 19:11:12
【问题描述】:

我想向源 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

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    这很简单,只需向标准 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多