¿Hay un OR exclusivo 'XOR' en XPath1.0?¿Hay un OR exclusivo 'XOR' en XPath?
Respuesta
Utilice esta XPath 1.0 expresión:
x and not(y) or y and not(x)
Siempre trate de evitar la !=
operador, porque tiene un significado inesperado/comportamiento cuando uno o ambos de sus argumentos son conjuntos de nodos.
En XSLT 2.0 o XQuery 1.0 se puede escribir esto como una función y luego usar solo la función en cualquier expresión XPath. A continuación se muestra una definición de función 2.0 XSLT para xor
y un pequeño ejemplo del uso de esta función:
<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), '
')
"/>
</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>
cuando se aplica esta transformación en cualquier documento XML (no se utiliza), el, resultado correcto querido se produce:
xor(true , true) = false
xor(true , false) = true
xor(false , true) = true
xor(false , false) = false
No, pero se puede emular:
(a or b) and (a != b)
gracias ¿verdad si existe en xpath2.0? –
No existe ni en XPath 2.0. – Erlock
@Christophe: Esto funciona si suponemos que 'a' y' b' son valores booleanos únicos. Si cualquiera de los dos es un conjunto de nodos, tenga cuidado con las comparaciones existenciales. Una forma más segura sería '(ao b) y no (a y b)'. – LarsH
number($boolean_var)
convierte true()
-1
y false()
a 0
. (Tenga en cuenta que true
solo aborda un nodo !!)
boolean($numeric_var)
convierte 1
-true()
y 0
a false()
.
Por lo tanto, XOR se puede lograr por:
boolean((number($v1) + number($v2) + number($v3)) mod 2)
es decir, adición menos significativo bits usando el operador mod 2
. Sí, XPATH es engorroso.
- 1. ¿Hay un "o" en los selectores XPath?
- 2. ¿Hay una función dividida en xpath?
- 3. O exclusivo en Oracle
- 4. XPath: obtener los nodos que no tienen un antepasado X
- 5. Exclusivo O en expresión regular
- 6. O exclusivo en el Esquema
- 7. NHibernate: bloqueo exclusivo
- 8. iOS exclusivo UTI
- 9. ¿Cómo hago un pago y envío exclusivo en SVN?
- 10. ¿Hay un validador Javascript X/HTML puro?
- 11. abrir archivo en modo exclusivo en C#
- 12. ¿Hay un equivalente de XPath para Linq a XML?
- 13. ¿Hay alguna diferencia entre x ++ y ++ x en java?
- 14. Cómo seleccionar nodos que tiene X como descendiente usando XPath
- 15. xpath: ¿Hay alguna manera de obtener todo el texto de los niños en xpath
- 16. Actualización de registro atómico exclusivo de SQL
- 17. ¿Object.GetHashCode() es exclusivo de una referencia o un valor?
- 18. xpath: descifrar este xpath?
- 19. ¿Hay alguna diferencia entre "Objeto [] x" y "Objeto x []"?
- 20. usando paréntesis en xpath/xslt
- 21. Modo de cálculo exclusivo con OpenCL + NVidia
- 22. ¿Puede XPath devolver solo nodos que tengan un hijo de X?
- 23. ¿Hay un equivalente Python del operador x de Perl?
- 24. Actualización de boost :: shared_lock al bloqueo exclusivo
- 25. ¿Hay un buen cliente de Fogbugz para Mac OS X?
- 26. clave única frente a índice exclusivo en SQL Server 2008
- 27. jquery: ¿seleccionando xpath o convirtiendo xpath en css?
- 28. Seleccionar un nodo específico en XPath
- 29. XPath: ¿Cómo se hace una llamada en minúscula en xpath
- 30. ¿Hay una biblioteca JS para proporcionar capacidades xpath a IE
+1 buen ejemplo de las características de XPath 2.0 y de una demostración que demuestra a fondo la funcionalidad. (Y evitar comparaciones existenciales difíciles.) – LarsH