Compartir a través de


Especificar operadores relacionales en consultas XPath (SQLXML 4.0)

Se aplica a: SQL ServerAzure SQL Database

En los siguientes ejemplos se muestra cómo especificar operadores relacionales en consultas XPath. Las consultas XPath de estos ejemplos se especifican en el esquema de asignación que se incluye en SampleSchema1.xml. Para obtener información sobre este esquema de ejemplo, vea Ejemplo de esquema XSD anotado para ejemplos de XPath (SQLXML 4.0).

Ejemplos

A Especificar un operador relacional

Esta consulta XPath devuelve los elementos secundarios del elemento Customer> donde el valor del atributo CustomerID es "1" y donde los elementos Order secundarios <contienen un< elemento secundario OrderDetail>> con un atributo OrderQty con un valor mayor que 3:<

/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  

El predicado especificado entre corchetes filtra los elementos Customer>.< Solo se devuelven los elementos Customer> que tienen al menos un< nieto OrderDetail> con un valor de atributo OrderQty mayor que 3.<

El eje secundario es el valor predeterminado. Por lo tanto, la consulta puede especificarse como:

/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  
Para probar la consulta XPath en el esquema de asignación
  1. Copie el código de esquema de ejemplo y péguelo en un archivo de texto. Guarde el archivo como SampleSchema1.xml.

  2. Cree la siguiente plantilla (SpecifyRelationalA.xml) y guárdela en el mismo directorio donde esté guardado el archivo SampleSchema1.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  
      </sql:xpath-query>  
    </ROOT>  
    

    La ruta de acceso al directorio especificada para el esquema de asignación (SampleSchema1.xml) es relativa al directorio donde se guarda la plantilla. También puede especificarse una ruta de acceso absoluta como, por ejemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Cree y use el script de prueba SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar la plantilla.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

Éste es el conjunto de resultados de ejecución de la plantilla:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <OrderDetail ProductID="Prod-760" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-766" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-757" UnitPrice="1049.7528" OrderQty="4" UnitPriceDiscount="0" />   
</ROOT>  

B. Especificar el operador relacional de la consulta XPath y usar una función booleana para comparar el resultado

Esta consulta devuelve todos los <elementos secundarios order> del nodo de contexto que tienen un valor de atributo SalesPersonID inferior a 270:

/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]  

Se puede especificar un acceso directo al eje de atributos (@) y, dado que el eje secundario es el valor predeterminado, se puede omitir de la consulta:

/Customer/Order[(@SalesPersonID < 270)=true()]  

Nota:

Cuando esta consulta se especifica en una plantilla, el < carácter debe estar codificado como entidad porque el < carácter tiene un significado especial en un documento XML. En una plantilla, use < para especificar el < carácter.

Para probar la consulta XPath en el esquema de asignación
  1. Copie el código de esquema de ejemplo y péguelo en un archivo de texto. Guarde el archivo como SampleSchema1.xml.

  2. Cree la siguiente plantilla (SpecifyRelationalB.xml) y guárdela en el directorio donde esté guardado el archivo SampleSchema1.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="SampleSchema1.xml">  
            /Customer/Order[(@SalesPersonID<270)=true()]  
        </sql:xpath-query>  
    </ROOT>  
    

    La ruta de acceso al directorio especificada para el esquema de asignación (SampleSchema1.xml) es relativa al directorio donde se guarda la plantilla. También puede especificarse una ruta de acceso absoluta como, por ejemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Cree y use el script de prueba SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar la plantilla.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

Este es el conjunto parcial de resultados de ejecución de la plantilla:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Order SalesOrderID="Ord-46613" SalesPersonID="268"   
         OrderDate="2002-07-01T00:00:00"   
         DueDate="2002-07-13T00:00:00"   
         ShipDate="2002-07-08T00:00:00">  
    <OrderDetail ProductID="Prod-739" UnitPrice="917.9363"   
                 OrderQty="2" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-779" UnitPrice="1491.4221"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-825" UnitPrice="242.1391"   
                 OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
  <Order SalesOrderID="Ord-71919" SalesPersonID="268"  
         OrderDate="2004-06-01T00:00:00"   
         DueDate="2004-06-13T00:00:00"   
         ShipDate="2004-06-08T00:00:00">  
    <OrderDetail ProductID="Prod-961" UnitPrice="534.492"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-965" UnitPrice="534.492"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-966" UnitPrice="1716.5304"   
                 OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
  ...  
</ROOT>