我是xslt的新手,我试图从以下xml中删除元素'Input'
我的输入XML:
<ns1:Input xmlns:ns1="http://www.test.org/">
<Process xmlns="http://www.acord.org/...."
xsi:schemaLocation="http://www.acord.org/schema/... ">
.....
</Process>
</ns1:Input>
预期产出:
<Process xmlns="http://www.acord.org/...."
xsi:schemaLocation="http://www.acord.org/schema/... ">
.....
</Process>
我正在使用Identity变换,
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
所以它将整个xml复制到目标xsd,但它正在使用'input'元素进行复制,我要删除它。 感谢任何快速帮助。
谢谢, cdhar
答案 0 :(得分:0)
添加模板
<xsl:template match="ns1:Input">
<xsl:apply-templates/>
</xsl:template>
在任何情况下,您都可能在Process
元素上获得根命名空间声明,因此使用XSLT 2.0,您可能需要在身份转换中使用<xsl:copy copy-namespaces="no">...
(http://xsltransform.net/bFN1yag)
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="@*|node()">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns1:Input" xmlns:ns1="http://www.test.org/">
<xsl:apply-templates/>
</xsl:template>
</xsl:transform>
或者您需要使用<xsl:element name="{name()}" namespace="{namespace-uri()}">
而不是xsl:copy
在XSLT 1.0中创建元素。