2011-06-27 8 views

उत्तर

15

उपयोग इस XPath 1.0 अभिव्यक्ति:

x and not(y) or y and not(x) 

हमेशा की तरह, != ऑपरेटर से बचने की कोशिश है क्योंकि यह एक अप्रत्याशित अर्थ नहीं है/व्यवहार जब एक या दोनों तर्क नोड-सेट होते हैं।

एक्सएसएलटी 2.0 या XQuery 1.0 में कोई इसे फ़ंक्शन के रूप में लिख सकता है और फिर किसी भी XPath अभिव्यक्ति में फ़ंक्शन का उपयोग कर सकता है।

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:f="my:f"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:sequence select= 
    "for $x in (true(), false()), 
     $y in (true(), false()) 
    return 
     ('xor(', $x, ',', $y,') = ', f:xor($x, $y), '&#xA;') 
    "/> 
</xsl:template> 

<xsl:function name="f:xor"> 
    <xsl:param name="pX" as="xs:boolean"/> 
    <xsl:param name="pY" as="xs:boolean"/> 

    <xsl:sequence select= 
    "$pX and not($pY) or $pY and not($pX)"/> 
</xsl:function> 
</xsl:stylesheet> 

जब इस बदलाव किसी भी XML दस्तावेज़ (इस्तेमाल नहीं किया) पर लागू किया जाता है, चाहता था, सही परिणाम उत्पादन किया जाता है: नीचे xor के लिए एक XSLT 2.0 समारोह परिभाषा और इस समारोह का उपयोग करने का एक छोटा सा उदाहरण है

xor(true , true) = false 
xor(true , false) = true 
xor(false , true) = true 
xor(false , false) = false 
+0

+1 XPath 2.0 सुविधाओं का अच्छा उदाहरण, और एक डेमो जो कार्यक्षमता को पूरी तरह से प्रदर्शित करता है। (और मुश्किल अस्तित्व की तुलना से परहेज।) – LarsH

4

नहीं लेकिन आप इसे का अनुकरण कर सकते हैं:

(a or b) and (a != b) 
+0

धन्यवाद यदि आप xpath2.0 में मौजूद हैं तो धन्यवाद? –

+1

यह XPath 2.0 में मौजूद नहीं है। – Erlock

+2

@ क्रिस्टोफ़े: यह काम करता है अगर हम मानते हैं कि 'ए' और' बी 'एकल बूलियन मान हैं। यदि कोई भी नोडसेट है, तो मौजूदा तुलना के लिए देखें। एक सुरक्षित रूप '(ए या बी) होगा और नहीं (ए और बी)'। – LarsH

0

number($boolean_var)true()0 को 1 करने और false() बदल देता है। (ध्यान दें कि true अकेले एक नोड के पते !!)

boolean($numeric_var)1false() को true() करने और 0 बदल देता है।

boolean((number($v1) + number($v2) + number($v3)) mod 2)

अर्थात कम से कम-महत्वपूर्ण बिट mod 2 ऑपरेटर का उपयोग इसके अलावा:

इसलिए, XOR द्वारा पूरा किया जा सकता है। हां, XPATH बोझिल है।

संबंधित मुद्दे