XSLT标识转换:删除元素



我是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中创建元素。

最新更新