我想在源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
?
答案 0 :(得分: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>