我的项目中有一个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>
如果你想在任何情况下复制属性,那么至少要改变
<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
元素,因此为该元素编写模板可能比您采用的方法更容易。