我目前有以下XML文件:
<Regions>
<Region>
<Code>AU</Code>
<Name>Austria</Name>
</Region>
</Regions>
<Channels>
<Channel>
<Code>00</Code>
<Name>Im a channel</Name>
</Channel>
...
</Channels>
<Programs>
<Program>
<Code>00</Code>
<Name>Program</Name>
</Program>
</Programs>
我只想保留频道路径,以便输出看起来像这样使用XSLT:
<Channels>
<Channel>
<Code>00</Code>
<Name>Im a channel</Name>
</Channel>
...
</Channels>
答案 0 :(得分:2)
此转化:
<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="/*">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/t/*[not(self::Channels)]"/>
</xsl:stylesheet>
应用于提供的XML文档(已修复为格式良好):
<t>
<Regions>
<Region>
<Code>AU</Code>
<Name>Austria</Name>
</Region>
</Regions>
<Channels>
<Channel>
<Code>00</Code>
<Name>Im a channel</Name>
</Channel>
</Channels>
<Programs>
<Program>
<Code>00</Code>
<Name>Program</Name>
</Program>
</Programs>
</t>
会产生想要的正确结果:
<Channels>
<Channel>
<Code>00</Code>
<Name>Im a channel</Name>
</Channel>
</Channels>
<强>解释强>:
使用身份规则,覆盖top元素(pass-through)和top元素的任何非Channels
子元素(删除)。