使用する:
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 ドキュメント(提供されたフラグメントを 1 つの最上位要素にラップすることによって形成される) に適用される場合:
<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
説明:
二重否定法則の直接使用。