xslt通过跳过一些元素将xml转换为文本

时间:2014-08-21 15:43:38

标签: xml xslt

我想将XML文件转换为文本,但我还想要一些不被转换的元素。

例如输入:

  <parent> Some parent text
     <child1>child text</child>
       more parent text
  </parent>

预期产出:

  Some parent text <child1>child text</child> more parent text

我目前的XSLT:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt">
   <xsl:output method="text" indent="no"/>

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

      <xsl:template match="child1">
         <xsl:element name="child1">
             <xsl:apply-templates select="node()"/>
         </xsl:element>
      </xsl:template>

  </xsl:stylesheet>

但我得到的是:

Some parent text child text more parent text

无论如何我可以修复这个以包含一些子元素吗?

1 个答案:

答案 0 :(得分:2)

此XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="no" omit-xml-declaration="yes"/>

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

  <xsl:template match="parent">
    <xsl:apply-templates select="node()"/>
  </xsl:template>

</xsl:stylesheet>

应用于此XML输入文档:

<parent> Some parent text
     <child1>child text</child1>
       more parent text
</parent>

将生成所请求的(格式不正确的XML)输出文档:

 Some parent text
     <child1>child text</child1>
       more parent text

当然,您也可以匹配child1个元素:

  <xsl:template match="child1">
    <xsl:element name="child1_NEW">
      <xsl:apply-templates select="node()"/>
    </xsl:element>
  </xsl:template>

以不同的方式处理它们:

 Some parent text
     <child1_NEW>child text</child1_NEW>
       more parent text