使用xsl从具有重复ID的xml文件中删除节点

时间:2014-09-04 06:23:06

标签: xml node.js xslt

我有xml如下:

<panel id="MainPanel" x="0" y="0" w="100%" h="100%" backgroundcolor="green" >

  <panel id="somepanel" x="0" y="130" w="100%" h="PANEL_ALIGN" backgroundcolor="red" >
    <panel id="nextpanel" x="0" y="130" w="100%" h="PANEL_ALIGN" backgroundcolor="red" >
       <table id="TestPanel" x="1%" y="20" w="98%" h="PANEL_ALIGN""></table>
       <table id="TestPanel" x="1%" y="20" w="98%" h="PANEL_ALIGN""></table>
       <table id="TestPanel2" x="1%" y="20" w="98%" h="PANEL_ALIGN""></table>
     </panel>
  </panel>

预期是:

<panel id="MainPanel" x="0" y="0" w="100%" h="100%" backgroundcolor="green" >

  <panel id="somepanel" x="0" y="130" w="100%" h="PANEL_ALIGN" backgroundcolor="red" >
    <panel id="nextpanel" x="0" y="130" w="100%" h="PANEL_ALIGN" backgroundcolor="red" >
    <table id="TestPanel" x="1%" y="20" w="98%" h="PANEL_ALIGN""></table>
      <table id="TestPanel2" x="1%" y="20" w="98%" h="PANEL_ALIGN""></table>
     </panel>
</panel>

我在xsl下面使用删除表节点,但它删除了所有表节点。

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

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

 <xsl:template
 match="table"/>
 </xsl:stylesheet>

任何人都可以提供帮助,因为我不知道xslt。

1 个答案:

答案 0 :(得分:1)

将其添加到您的样式表作为顶级:

<xsl:key name="kTable" match="table" use="@id"/>

并替换

<xsl:template match="table"/>

<xsl:template match="table[generate-id() != generate-id(key('kTable', @id)[1])]"/>