用途:
not(/*/*/*/Type[not(contains('|A|B|', concat('|',.,'|')))])
這種表達是可行的情況下使用其列表/套針對其檢查值是很長。它還可以輕鬆地將管道分隔的值列表作爲參數傳遞。
XSLT系驗證:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"not(/*/*/*/Type[not(contains('|A|B|', concat('|',.,'|')))])"/>
</xsl:template>
</xsl:stylesheet>
當在下面的XML文檔(通過包裝提供片段到單個頂部元件形成)被施加這種轉變:
<t>
<Record>
<subRecord>
<Type>A</Type>
</subRecord>
</Record>
<Record>
<subRecord>
<Type>B</Type>
</subRecord>
</Record>
<Record>
<subRecord>
<Type>C</Type>
</subRecord>
</Record>
</t>
評估XPath表達式並將此評估的結果複製到輸出中:
false
當相同的變換上應用這個 XML文檔:
<t>
<Record>
<subRecord>
<Type>A</Type>
</subRecord>
</Record>
<Record>
<subRecord>
<Type>B</Type>
</subRecord>
</Record>
</t>
再次正確的結果產生:
true
說明:
直接使用Double Negation Law。
謝謝!我從你的迴應中得到了這個想法,並且不使用(存在(Record/subRecord/Type [not(。=「A」或。=「B」)])),這對我的狀況返回false。 – 2013-03-22 10:08:21
很高興幫助。歡迎來到堆棧溢出! – MattH 2013-03-22 10:10:24