Compartir a través de


Especificar ejes en consultas XPath (SQLXML 4.0)

Se aplica a: SQL ServerAzure SQL Database

Los ejemplos siguientes muestran cómo se especifican los ejes en las 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 Recuperar elementos secundarios del nodo de contexto

La siguiente consulta XPath selecciona todos los <elementos secundarios Contact> del nodo de contexto:

/child::Contact  

En la consulta, child es el eje y Contact es la prueba de nodo (TRUE si Contact es un <nodo de elemento, porque <el elemento>> es el tipo de nodo principal asociado al child eje).

El eje child es el valor predeterminado. Por tanto, la consulta puede escribirse como:

/Contact  
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 (XPathAxesSampleA.xml) y guárdela en el mismo directorio en el que esté guardado el archivo SampleSchema1.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Contact  
      </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">   
  <Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />   
  <Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />   
  <Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />   
  <Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />  
  ...  
</ROOT>  

B. Recuperar descendientes del nodo de contexto

La siguiente consulta XPath selecciona todos los <elementos secundarios order> del <elemento Customer> secundarios del nodo de contexto:

/child::Customer/child::Order  

En la consulta, child es el eje y Customer Order son las pruebas de nodo (estas pruebas de nodo son TRUE si Customer y Order son <nodos de elemento>, ya que el <nodo de elemento> es el nodo principal del eje secundario). Para cada nodo que coincida con Customer>, los nodos que coinciden<< con Orders> se agregan al resultado. Solo <se devuelve Order> en el conjunto de resultados.

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

/Customer/Order  
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 plantilla siguiente (XPathAxesSampleB.xml) y guárdela en el directorio donde:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer/Order  
      </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-43860" SalesPersonID="280"   
         OrderDate="2001-08-01T00:00:00"   
         DueDate="2001-08-13T00:00:00"   
         ShipDate="2001-08-08T00:00:00">  
  <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-761" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-762" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-765" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-768" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-770" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
   ...  
</ROOT>  

Si la consulta XPath se especifica como Customer/Order/OrderDetail, desde cada nodo que coincida con <Customer>, la consulta navega a sus< elementos Order.> Y para cada nodo que coincida con <Order>, la consulta agrega los nodos <OrderDetail> al resultado. Solo <se devuelve OrderDetail> en el conjunto de resultados.

C. Usar . para especificar el eje primario

La consulta siguiente recupera todos los <elementos Order> con un elemento Customer> primario <con un valor de atributo CustomerID de 1. La consulta usa el eje secundario en el predicado para buscar el elemento primario del <elemento Order> .

/child::Customer/child::Order[../@CustomerID="1"]  

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

/Customer/Order[../@CustomerID="1"]  

La consulta XPath es equivalente a:

/Customer[@CustomerID="1"]/Order.  

Nota:

La consulta /Order[../@CustomerID="1"] XPath devolverá un error porque no hay ningún elemento primario de <Order>. Aunque puede haber elementos en el esquema de asignación que contienen <Order>, XPath no comenzó en ninguno de ellos; en consecuencia, <Order> se considera que es el tipo de elemento de nivel superior del documento.

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 plantilla siguiente (XPathAxesSampleC.xml) y guárdela en el directorio donde:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer/Order[../@CustomerID="1"]  
      </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-43860" SalesPersonID="280"   
         OrderDate="2001-08-01T00:00:00"   
         DueDate="2001-08-13T00:00:00"   
         ShipDate="2001-08-08T00:00:00">  
  <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-761" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-762" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-765" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-768" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-770" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
   ...  
</Order>  
</ROOT>  

D. Especificar el eje de atributo

La siguiente consulta XPath selecciona todos los <elementos secundarios Customer> del nodo de contexto con un valor de atributo CustomerID de 1:

/child::Customer[attribute::CustomerID="1"]  

En el predicado attribute::CustomerID, attribute es el eje y CustomerID es la prueba de nodo (si CustomerID es un atributo, la prueba de nodo es TRUE, porque el <nodo de atributo> es el nodo principal del attribute eje).

Se puede especificar un acceso directo al eje attribute (@) y, puesto que el eje child es el eje predeterminado, puede omitirse en la consulta:

/Customer[@CustomerID="1"]  
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 (XPathAxesSampleD.xml) y guárdela en el mismo directorio en el que esté guardado el archivo SampleSchema1.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        child::Customer[attribute::CustomerID="1"]  
      </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">  
  <Customer CustomerID="1" SalesPersonID="280"   
            TerritoryID="1" AccountNumber="1"   
            CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">  
    <Order SalesOrderID="Ord-43860" SalesPersonID="280"   
           OrderDate="2001-08-01T00:00:00"   
           DueDate="2001-08-13T00:00:00"   
           ShipDate="2001-08-08T00:00:00">  
       <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
                    OrderQty="1" UnitPriceDiscount="0" />   
       <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
                    OrderQty="1" UnitPriceDiscount="0" />   
       <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
                    OrderQty="1" UnitPriceDiscount="0" />   
      ...   
    </Order>  
   ...  
  </Customer>  
</ROOT>