XSLT标识转换:删除元素

时间:2016-04-07 10:11:20

标签: xml 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>

我正在使用Identity变换,

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

所以它将整个xml复制到目标xsd,但它正在使用'input'元素进行复制,我要删除它。 感谢任何快速帮助。

谢谢, cdhar

1 个答案:

答案 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中创建元素。