Compartir a través de


Especificar predicados con valores booleanos en las consultas XPath (SQLXML 4.0)

En los ejemplos siguientes se muestra cómo se especifican los predicados con valores booleanos 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 más información sobre este esquema de ejemplo, vea Esquema XSD anotado de ejemplo para los ejemplos de XPath (SQLXML 4.0).

Ejemplos

A. Especificar varios predicados

La consulta XPath siguiente utiliza varios predicados para buscar la información de pedido para un determinado identificador de pedido e identificador de cliente:

/child::Customer[attribute::CustomerID="1"]/child::Order[attribute::OrderID="Ord-43860"]

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

/Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]

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 (BooleanValuedPredicatesA.xml) y guárdela en el directorio donde esté guardado SampleSchema1.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="SampleSchema1.xml">
        /Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]
      </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, vea Utilizar ADO para ejecutar consultas SQLXML 4.0.

    Éste es el resultado:

    <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>
    

B. Especificar los predicados sucesivos y anidados

La consulta siguiente muestra cómo utilizar los predicados sucesivos. La consulta devuelve todos los elementos secundarios <Customer> del nodo de contexto que tienen un atributo SalesPersonID con un valor de 277 y un atributo TerritoryID con un valor de 3:

/child::Customer[attribute::SalesPersonID="277"][attribute::TerritoryID="3"]

La consulta devuelve los elementos <Customer> que satisfacen las dos condiciones especificadas en los predicados.

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

/Customer[@SalesPersonID="277"][@TerritoryID="3"]

La consulta XPath siguiente muestra el uso de los predicados anidados. La consulta devuelve todos los elementos secundarios <Customer> del nodo de contexto que incluyen los elementos secundarios <Order> con al menos un elemento <Order> que tiene un valor de atributo SalesPersonID de 2.

/Customer[Order[@SalesPersonID=2]]

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 (nestedSuccessive.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[@SalesPersonID="277"][@TerritoryID="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, vea Utilizar ADO para ejecutar consultas SQLXML 4.0.

A continuación figura un resultado parcial:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="22" SalesPersonID="277" TerritoryID="3" 
            AccountNumber="22" CustomerType="S" 
            Orders="Ord-43874 Ord-44519 Ord-46989 Ord-48013 Ord-49130 Ord-50274 Ord-51807 Ord-57113 Ord-63162 Ord-69495">
    <Order SalesOrderID="Ord-43874" SalesPersonID="277" 
           OrderDate="2001-08-01T00:00:00" 
           DueDate="2001-08-13T00:00:00" 
           ShipDate="2001-08-08T00:00:00">
      <OrderDetail ProductID="Prod-763" UnitPrice="503.3507" 
                   OrderQty="1" UnitPriceDiscount="0" /> 
    </Order>
    ...
  </Customer>
  <Customer CustomerID="39" SalesPersonID="277" TerritoryID="3" 
            AccountNumber="39" CustomerType="S" 
            Orders="Ord-47428 Ord-48367 Ord-49529 Ord-50742 Ord-53591 Ord-59051 Ord-65301 Ord-71912">    <Order SalesOrderID="Ord-47428" SalesPersonID="277" 
           OrderDate="2002-09-01T00:00:00" 
           DueDate="2002-09-13T00:00:00" 
           ShipDate="2002-09-08T00:00:00">
      <OrderDetail ProductID="Prod-759" UnitPrice="563.7528" OrderQty="2" UnitPriceDiscount="0" /> 
      <OrderDetail ProductID="Prod-769" UnitPrice="563.7528" OrderQty="1" UnitPriceDiscount="0" /> 
      ...
    </Order>
    ...
  </Customer>
  ...
</ROOT>

C. Especificar un predicado de nivel superior

La consulta siguiente devuelve los nodos del elemento secundario <Customer> del nodo de contexto que tienen elementos secundarios del elemento <Order>. La consulta prueba la ruta de acceso de la ubicación como el predicado de nivel superior:

/child::Customer[child::Order]

El eje child 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 siguiente plantilla (TopLevelPredicate.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[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, vea Utilizar ADO para ejecutar consultas SQLXML 4.0.

Éste es el resultado parcial:

<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>
    <Order SalesOrderID="Ord-44501" SalesPersonID="280" OrderDate="2001-11-01T00:00:00" DueDate="2001-11-13T00:00:00" ShipDate="2001-11-08T00:00:00">
      <OrderDetail ProductID="Prod-725" UnitPrice="226.8571" OrderQty="3" UnitPriceDiscount="0" /> 
      <OrderDetail ProductID="Prod-726" UnitPrice="226.8571" OrderQty="2" UnitPriceDiscount="0" /> 
      ...
    </Order>    ...
  </Customer>
  ...
</ROOT>