2017-08-17 2 views
2

XML:XSLT等しいか等しくない演算子は、不在ノードで同じ結果を返します。どのように可能ですか?

<root></root> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes" encoding="UTF-8"/> 
    <xsl:template match="/root"> 
     absent_node EQUALS zero-length string [<xsl:value-of select="absent_node=''"/>]; 
     absent_node NOT EQUALS zero-length string via != [<xsl:value-of select="absent_node!=''"/>] 
    </xsl:template> 
</xsl:stylesheet> 

結果:

absent_node EQUALS zero-length string [false]; 
absent_node NOT EQUALS zero-length string [false] 

私はsimilar issue with pythonを見ましたが、ここでの説明を必要としています。

text()またはstring()による明示的な値型のキャストなしに正反対の結果を得たい場合はnot()を使用していますか?

答えて

2

これは、このタイプの比較で期待される結果です。

ノードセットと文字列を比較しています。比較 ノードセットそのようなノードの ストリング値で比較を行った結果、そのノードが存在する場合にのみ真となり

:なるように比較状態のためrulesもう一方の文字列は真です。

このルールは、すべての比較演算子(=, !=, <=, <, >= and >)に対して一様に定義されています。

ノードセットが空であるため、使用している演算子に関係なく、比較結果がtrueを返すノードは存在しません。

not(node = 'string') 

の否定として:


使用することが通例である

node = 'string' 
+1

引用は、XPath 1.0仕様からのものであるが、2.0ルールは、しかし、本質的に同じです任意の配列に一般化される。 Xが空シーケンスである場合、(X = 'a')は「Xにa 'と等しい項目がある」ことを意味し、(X!=' a ')は「Xに項目がある'a'と等しくない。 Xが空のシーケンスである場合、両方の条件は偽です。 –

+0

また、存在しない要素/属性をSQLでnullのように扱う場合、セマンティクスはSQLセマンティクスに非常によく似ていることに注意してください。X = 'a'およびX!= 'a'選択することはできません。違いは、SQLでは述語が事実上nullと評価されますが、XPathではfalseと評価される点です。 –

関連する問題