Ed:跟随Copy parallel element as child element of another element :
输入XML
<root>
<order orderId="12345">
<cartId>12346</cartId>
<orderPayment paymentId="1234">
<debitCardPayment>
<chargeAmount currencyCode="USD">22.20</chargeAmount>
<debitCard>
<PIN>1234</PIN>
<PIN1></PIN1>
</debitCard>
</debitCardPayment>
</orderPayment>
</order>
<context>
</context>
</root>
<order>
.....
</order>
<orderPayment>
.....
<debitCard>
<PIN>1234</PIN>
</debitCard>
</orderPayment>
<context>
</context>
我有XSLT如下
<xsl:template match="Root">
<updateOrderCheckoutRequest version="1">
<xsl:apply-templates select="@*|node()"/>
<xsl:copy-of select="//orderPayment"/>
</updateOrderCheckoutRequest>
</xsl:template>
<xsl:template match="orderPayment"/>
<xsl:template match="order">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test=".='' and count(@*)=0">
<xsl:apply-templates select="@*|node()"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
也在复制空元素。 在应用副本时是否有可能删除空元素。 提前谢谢......
答案 0 :(得分:0)
是否有可能在申请时删除空元素 复制的。
不,如果不按原样复制所有内容,则无法使用xsl:copy-of
。如果要对要复制的节点应用进一步更改,则必须采用其他策略,例如:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::orderPayment)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="order">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../orderPayment"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
现在正在复制orderPayment
&#34;凭借身份转换模板 - 您可以添加更多特定模板来覆盖,例如:
<xsl:template match="PIN1[not(string())]"/>
删除空的PIN1
元素。
答案 1 :(得分:0)
请尝试以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<updateOrderCheckoutRequest version="1">
<xsl:apply-templates select="@*|node()"/>
</updateOrderCheckoutRequest>
</xsl:template>
<xsl:template match="order">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::orderPayment)]"/>
</xsl:copy>
<xsl:apply-templates select="orderPayment"/>
</xsl:template>
<xsl:template match="*[not(string())]"/>
</xsl:stylesheet>