我的项目中有一个XSL。我正在更新新的要求。 我在帖子中复制了它的一部分(XSL在1200行左右很大)。 在下面的xml中,我在元素InvoiceDetailRequest / InvoiceDetailRequestHeader / Extrinsic / Attachment / URL下有一个值。 通过使用下面的xsl,我将值“URL”更新为“更新的URL”。 但是在输出XML中它没有复制属性name =“invoicePDF”。 任何人都可以帮助为什么属性没有复制?
感谢您的帮助。
小猫。
-------------------输入XML -----------------
<InvoiceDetailRequest>
<InvoiceDetailRequestHeader>
<Extrinsic name="invoicePDF">
<Attachment>
<URL>
URL
</URL>
</Attachment>
</Extrinsic>
</InvoiceDetailRequestHeader>
</InvoiceDetailRequest>
---------------- XSL ---------------------
<xsl:output omit-xml-declaration="yes" encoding="UTF-8"
indent="yes" />
<xsl:strip-space elements="*" />
<xsl:variable name="invoicePDFExtrinsic"
select="InvoiceDetailRequest/InvoiceDetailRequestHeader/Extrinsic[@name='invoicePDF']" />
<xsl:template match="@*|node()"> <!-- Whenever any node or any attribute is matched -->
<xsl:copy> <!-- Copy the current node -->
<xsl:apply-templates select="@*|node()" /> <!-- Including any attributes it has and any child nodes -->
</xsl:copy>
</xsl:template>
<xsl:template match="InvoiceDetailRequest/InvoiceDetailRequestHeader">
<xsl:copy>
<!-- And everything inside it -->
<xsl:apply-templates select="@* | *" />
<xsl:if test="not($invoicePDFExtrinsic)">
<xsl:element name="Extrinsic">
<xsl:attribute name="name">invoicePDF</xsl:attribute>
<Attachment>
<URL>
URL
</URL>
</Attachment>
</xsl:element>
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template
match="InvoiceDetailRequest/InvoiceDetailRequestHeader/Extrinsic[@name='invoicePDF']">
<xsl:copy>
<xsl:choose>
<xsl:when test="$invoicePDFExtrinsic">
<Attachment>
<URL>
Updated URL
</URL>
</Attachment>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@*|node()" />
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
--------------------输出XML ------------------------ -------------------------------
<InvoiceDetailRequest>
<InvoiceDetailRequestHeader>
<Extrinsic>
<Attachment>
<URL>
Updated URL
</URL>
</Attachment>
</Extrinsic>
</InvoiceDetailRequestHeader>
</InvoiceDetailRequest>
答案 0 :(得分:0)
如果您想在任何情况下复制属性,那么至少要更改
<xsl:template
match="InvoiceDetailRequest/InvoiceDetailRequestHeader/Extrinsic[@name='invoicePDF']">
<xsl:copy>
到
<xsl:template
match="InvoiceDetailRequest/InvoiceDetailRequestHeader/Extrinsic[@name='invoicePDF']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
由于您只想操纵URL
元素,因此为该元素编写模板可能更容易,而不是您采用的方法。