Compartir a través de


Valores booleanos, comparaciones y expresiones fijas

Los modelos de filtro pueden contener expresiones booleanas, de comparación y de conjunto.Los accesos directos enumerados en la tabla siguiente representan símbolos alternativos que se proporcionan en esta implementación de transformaciones XSL (XSLT).Esta documentación describe estos operadores de expresión.

Operador

Descripción

and

AND lógico

or

OR lógico

not()

Negación

=

Igualdad

!=

No igual

< *

Menor que

<= *

Menor o igual que

> *

Mayor que

<= *

Mayor o igual que

|

Operación de conjunto, devuelve la unión de dos conjuntos de nodos

* Método XPath extendido

La sintaxis del World Wide Web Consortium (W3C) para palabras clave del operador utiliza espacios en blanco u otros separadores más que el signo del dólar ($) utilizado en la versión 2.5.El la sintaxis W3C, una palabra clave binaria con la forma $xxx$ puede expresarse como wsxxxws, donde ws se refiere a un token terminador que puede ser un espacio en blanco, caracteres de una sola comilla ('), o caracteres de comillas (").Los operadores unarios tales como not() utilizan notación funcional.Aunque la implementación de Microsoft es compatible con ambas sintaxis, se recomienda que la sintaxis W3C se utilice para compatibilidad futura.

Orden de prioridad (desde la prioridad más alta a la más baja) entre los operadores booleanos y de comparación en la siguiente tabla.

Prioridad

Operadores

Descripción

1

( )

Grupo

2

[ ]

Filtros

3

/

//

Operaciones de ruta

4

< o &lt;

<= o &lt;=

> o &gt;

>= o &gt;=

Comparaciones

5

=

!=

Comparaciones

6

|

Unión

7

not()

NOT booleano

8

And

AND booleano

9

Or

OR booleano

Cuando los operadores se utilizan en un documento XML, como una hoja de estilos XSLT, los tokens < y > deberán escaparse como &lt; y &gt;, respectivamente.Por ejemplo, la siguiente instrucción XSLT invoca una regla de plantilla XSLT en todos los elementos <book> cuyo elemento <price> tiene un valor numérico menor o igual que 10.

<xsl:apply-templates select="book[price &lt;= 10]"/>

Cuando se utiliza una expresión XPath con DOM, los operadores < y > no necesitan ser caracteres de escape.Por ejemplo, la siguiente instrucción JScript selecciona todos los elementos <book> cuyo elemento <price> tiene un valor numérico menor o igual que 10.

var cheap_books = dom.selectNodes("book[price <= 10]");

Las expresiones booleanas pueden coincidir con todos los nodos de un valor particular o todos los nodos con nodos en rangos particulares.El siguiente es un ejemplo de expresión booleana que devuelve falso.

1 &gt;= 2

Los operadores distinguen mayúsculas de minúsculas.

AND lógico y OR lógico

Los operadores booleanos and y or realizan operaciones AND lógico y OR lógico, respectivamente.Estos operadores, junto con los paréntesis de grupo, pueden utilizarse para crear expresiones lógicas sofisticadas.

Ejemplos

Expresión

Hace referencia a

author[degree and award]

Todos los elementos <author> que contienen al menos un elemento <degree> y al menos un elemento <award>.

author[(degree or award) and publication]

Todos los elementos <author> que contienen al menos un elemento <degree> o <award> y al menos un elemento <publication>.

NOT booleano

El operador booleano not niega el valor de una expresión dentro de un modelo de filtro.

Ejemplos

Expresión

Hace referencia a

author[degree and not(publication)]

Todos los elementos <author> que contienen al menos un elemento <degree>, pero que no contienen elementos <publication>

author[not(degree or award) and publication]

Todos los elementos <author> que contienen al menos un elemento <publication>, pero que no contienen ningún elemento <degree> o elementos <award>.

Ejemplo

Archivo XML (test.xml)

<?xml version="1.0"?>
<test>

    <x a="1">
      <x a="2" b="B">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>

    <x a="2">
      <y>y2</y>
    </x>

    <x a="3">
      <y>y3</y>
    </x>

</test>

Archivo XSLT (test.xsl)

La siguiente hoja de estilos XSLT selecciona todos los elementos <x> sin ningún atributo.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<!-- suppress text nodes not covered in subsequent template rule -->
<xsl:template match="text()"/>

<xsl:template match="*">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="*|@*"/>
      <xsl:if test="text()">
         <xsl:value-of select="."/>
      </xsl:if>
   </xsl:element>
</xsl:template>

<xsl:template match="@*">
   <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

<xsl:template match="/test">
  <xsl:apply-templates select="//x[not(@*)] "/>
</xsl:template>

</xsl:stylesheet>

Resultados

La transformación aplicada al archivo XML de arriba produce el siguiente resultado:

<x>
   <y>y31</y>
   <y>y32</y>
</x>