我是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>
我正在使用身份转换,如
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
因此,它将整个xml复制到目标xsd中,但它使用了我想要删除的"input"元素进行复制。感谢您的快速帮助。
谢谢,cdhar
添加模板
<xsl:template match="ns1:Input">
<xsl:apply-templates/>
</xsl:template>
在任何情况下,您都可能在Process
元素上获得根命名空间声明,因此使用XSLT2.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
在XSLT1.0中创建元素。