使用xslt转换Xml文件

时间:2015-02-04 18:49:47

标签: xml xslt

我的xml如下所示,我想使用xslt转换为xml:

       <items>
            <item id='10' name='item1'>
                 <atm id ='15' value='xxx'/>
            </item>

            <!-- this should not have the atm node displayed in the outptut -->
            <item id='11' name='item2'> 
                 <atm id ='16' value='yyyy'/>
            </item>
            <!-- this should not have the atm node displayed in the outptut -->
            <item id='11' name='item3'>
                 <atm id ='17' value='yyyy'/>
            </item>
       </items>

我想仅为项目标识为!='11'的项目显示atm节点值,因此输出应为:

 <items>
            <item id='10' name='item1'>
            <atm id ='15' value='xxx'/>
            </item>
            <item id='11' name='item2'/>
            <item id='11' name='item3'/>
 </items> 

所以我不希望atm子节点显示id = '11'的项目 会感谢你的帮助

1 个答案:

答案 0 :(得分:0)

  

我不希望atm子节点显示哪些项目   有一个id =&#39; 11&#39;

所以只需按原样复制所有内容,并通过将它们与不输出任何内容的模板进行匹配来抑制您不想要的节点:

* XSLT 1.0 **

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

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

<xsl:template match="atm[../@id='11']"/>

</xsl:stylesheet>

在你的例子中会产生:

<?xml version="1.0" encoding="UTF-8"?>
<items>
   <item id="10" name="item1">
      <atm id="15" value="xxx"/>
   </item>
   <item id="11" name="item2"/>
   <item id="11" name="item3"/>
</items>