【发布时间】:2017-03-09 19:57:04
【问题描述】:
我有一个很大的 XML 文件,我想根据多个条件过滤掉指定的元素,具体来说:
<title> contains 'K17' AND <category> contains 'APPLE'
所以我从这样的事情开始:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:g="http://base.google.com/ns/1.0">
<xsl:output omit-xml-declaration="no" indent="yes" method="xml"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item[not(title/contains(text(),'K17')) and not(category/contains(text(),'APPLE'))]" />
</xsl:stylesheet>
测试 XML:
<channel>
<item>
<title>K170001 Test 1</title>
<category><![CDATA[APPLE > MOBILE > IPHONE]]></category>
</item>
<item>
<title>K170002 Test 2</title>
<category><![CDATA[APPLE > MOBILE > IPHONE]]></category>
</item>
<item>
<title>K1x70003 Test 3</title>
<category><![CDATA[APPLE > MOBILE > IPHONE]]></category>
</item>
<item>
<title>K170004 Test 4</title>
<category><![CDATA[APxPLE > MOBILE > IPHONE]]></category>
</item>
</channel>
最后两个元素不应出现在最终的 XML 中,因为 'K1x70003' 和 'APxPLE'。
这就是我的 XSLT 失败的地方,看起来 AND 运算符就像一个 OR 运算符。
【问题讨论】: