Compartilhar via


Especificando eixos em consultas XPath (SQLXML 4.0)

Os seguintes exemplos mostram como os eixos são especificados em consultas XPath.

As consultas XPath nesses exemplos são especificadas com relação ao esquema de mapeamento contido em SampleSchema1.xml. Para obter informações sobre este esquema de exemplo, consulte Esquema XSD anotado de exemplo para exemplos de XPath (SQLXML 4.0).

Exemplos

a. Recuperar elementos filho do nó de contexto

A seguinte consulta XPath seleciona todos os <elementos filho Contact> do nó de contexto:

/child::Contact  

Na consulta, child é o eixo e Contact é o teste de nó (TRUE se Contact for um <nó de elemento> , porque <element> é o tipo de nó primário associado ao child eixo).

O eixo child é o padrão. Portanto, a consulta pode ser escrita da seguinte forma:

/Contact  
Para testar a consulta XPath com relação ao esquema de mapeamento
  1. Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.

  2. Crie o seguinte modelo (XPathAxesSampleA.xml) e salve-o no diretório onde SampleSchema1.xml foi salvo.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Contact  
      </sql:xpath-query>  
    </ROOT>  
    

    O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Aqui está o conjunto de resultados parcial da execução do modelo:

<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 os netos do nó de contexto

A consulta XPath a seguir seleciona todos os filhos do <elemento Order> dos <filhos do elemento Customer> do nó de contexto:

/child::Customer/child::Order  

Na consulta, child é o eixo e Customer e Order são os testes de nó (esses testes de nó são TRUE se Customer e Order são <nós de elemento> , porque o nó de <elemento> é o nó primário para o child eixo). Para cada nó correspondente <ao Cliente>, os nós correspondentes <a Pedidos> são adicionados ao resultado. Somente <Order> é retornado no conjunto de resultados.

O eixo child é o padrão. Assim, a consulta pode ser especificada como:

/Customer/Order  
Para testar a consulta XPath com relação ao esquema de mapeamento
  1. Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.

  2. Crie o seguinte modelo (XPathAxesSampleB.xml) e salve-o no diretório onde:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer/Order  
      </sql:xpath-query>  
    </ROOT>  
    

    O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Aqui está o conjunto de resultados parcial da execução do modelo:

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

Se a consulta XPath for especificada como Customer/Order/OrderDetail, de cada nó correspondente <ao Cliente> , a consulta navegará até seus <elementos Order> . E para cada nó correspondente <a Order>, a consulta adiciona os nós <OrderDetail> ao resultado. Somente <OrderDetail> é retornado no conjunto de resultados.

C. Usar . para especificar o eixo pai

A consulta a seguir recupera todos os <elementos Order> com um elemento Customer> pai< com um valor de atributo CustomerID igual a 1. A consulta usa o child eixo no predicado para localizar o pai do <elemento Order> .

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

O child eixo é o eixo padrão. Assim, a consulta pode ser especificada como:

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

A consulta XPath é equivalente a:

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

Observação

A consulta /Order[../@CustomerID="1"] XPath retornará um erro porque não há um pai de <Order>. Embora possa haver elementos no esquema de mapeamento que contenham <Order>, o XPath não começou em nenhum deles; consequentemente, <Order> é considerado o tipo de elemento de nível superior no documento.

Para testar a consulta XPath com relação ao esquema de mapeamento
  1. Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.

  2. Crie o seguinte modelo (XPathAxesSampleC.xml) e salve-o no diretório onde:

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

    O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Aqui está o conjunto de resultados parcial da execução do modelo:

<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 o eixo de atributo

A consulta XPath a seguir seleciona todos os elementos filho do <cliente> do nó de contexto com um valor de atributo CustomerID de 1:

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

No predicado attribute::CustomerID, attribute é o eixo e CustomerID é o teste de nó (se CustomerID for um atributo, o teste de nó será TRUE, pois o <nó de atributo> é o nó primário do attribute eixo).

Um atalho para o eixo attribute (@) pode ser especificado e, como o eixo child é o padrão, ele pode ser omitido da consulta:

/Customer[@CustomerID="1"]  
Para testar a consulta XPath com relação ao esquema de mapeamento
  1. Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.

  2. Crie seguinte o modelo (XPathAxesSampleD.xml) e salve-o no diretório onde SampleSchema1.xml foi salvo.

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

    O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Aqui está o conjunto de resultados parcial da execução do modelo:

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