我想使用XSLT复制mrss xml,但是使用XSLT过滤test
属性中没有label
值的项目。
这是我到目前为止所做的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:media="http://search.yahoo.com/mrss/">
<xsl:template match="/">
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel><xsl:apply-templates/></channel>
</rss>
</xsl:template>
<xsl:template match="channel/item[contains(media:category/@label,'test')] | channel/*[not(self::item)]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="channel/item[not(contains(media:category/@label,'test'))]">
</xsl:template>
</xsl:stylesheet>
我不喜欢的三件事:
rss
和channel
元素已存在于源XML中,但我仍需要将其放入XSL文件中有人可以建议更好/更简单的解决方案吗?
答案 0 :(得分:3)
是的,更好的方法是从身份模板开始,然后从那里开始。以下应该是您所需要的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:media="http://search.yahoo.com/mrss/">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="channel/item[not(contains(media:category/@label,'test'))]" />
</xsl:stylesheet>