【发布时间】:2015-08-12 17:28:10
【问题描述】:
输入 XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:VendorMessageRequest xmlns:ns2="http://order.com.company.com">
<ns2:purchaseOrder>
<assignedTo>
<firstName>firstnm</firstName>
<lastName>lstnm</lastName>
</assignedTo>
</ns2:purchaseOrder>
</ns2:VendorMessageRequest>
将 XSLT 用作:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="http://www.company.com/services/entity/v1"
xmlns:ns3="http://www.company.com/services/dataobject/v1"
xmlns:ns4="http://order.com.company.com">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ns4:purchaseOrder">
<xsl:element name="ns3:someOtherPurchaseOrder" >
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<ns3:someOtherPurchaseOrder xmlns:ns3="http://www.company.com/services/dataobject/v1">
<ns2:purchaseOrder xmlns:ns2="http://order.com.company.com">
firstnmlstn</ns2:purchaseOrder>
</ns3:someOtherPurchaseOrder>
并期望输出 XML 为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:someOtherPurchaseOrder xmlns:ns2="http://www.company.com/services/dataobject/v1">
<assignedTo>
<firstName>firstnm</firstName>
<lastName>lstnm</lastName>
</assignedTo>
</ns2:someOtherPurchaseOrder>
================= 我期待上面显示的 xml,其中匹配的元素名称(purchaseOrder)应该替换为其他名称(someOtherPurchaseOrder)。并且该匹配元素节点内的所有元素都应复制到更改的元素名称下。
即复制everthing并更改元素节点名称。
【问题讨论】:
-
这是您使用的实际 XSLT 吗?您有一个
xsl:template嵌套在另一个xsl:template中,这是不允许的,应该会导致错误。此外,如上一个问题中所述,命名空间是不同的。在您的 XML 中它是http://order.com.company.com,但在您的 XSLT 中它是http://order.com.company.com/,所以模板无论如何都不会匹配任何东西。是否可以编辑您的问题以更正此错误?谢谢! -
@Tim:对不起,这是我的打字错误,我刚刚更改了问题。
标签: xml xslt xslt-1.0 transformation xml-namespaces