使用XSLT从XML中剥离标签除了一些(否定条件)

时间:2012-08-08 15:49:01

标签: xml xslt xml-parsing

我想从我的XML文件中删除所有标签,除了有限数量的标签,我知道。我怎么能用XSLT做到这一点。

我知道我可以使用以下方法从我的xml中删除div标签,但我想否定,比如剥离所有BUT Div。

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

XSLT文件的更多片段:

  <xsl:template match="div"> <!-- switch the element name -->
    <xsl:element name="newdiv">
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

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

1 个答案:

答案 0 :(得分:0)

我相信这个问题已经answered了。 使用两个模板。

<xsl:template match="*">
   <!-- Everything -->
</xsl:template>

<xsl:template match="something | somethingelse">
   <!-- what you want ignored -->
</xsl:template>

第四次编辑。

输入样本:

<body>
    <table>
        <tr>
            <td>
            </td>
        </tr>
    <div>content</div>
    </table>
    <div>content again</div>
</body>

XSLT转换以满足您的需求:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="div">
       <xsl:element name="div">
         <xsl:copy-of select="@*" />
         <xsl:apply-templates />
       </xsl:element>
    </xsl:template>


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

除了DIV之外,这将删除所有标记。并且记录所有标签内容。我刚尝试过。