Especificando eixos em consultas XPath (SQLXML 4.0)

Aplica-se a: Banco de Dados SQL do Azure do SQL Server

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 esse esquema de exemplo, consulte Exemplo de esquema XSD anotado para exemplos de XPath (SQLXML 4.0).

Exemplos

R. Recuperar elementos filho do nó de contexto

A consulta XPath a seguir 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 Usar 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 forem <nós de elemento>, porque o <nó de elemento> é o nó primário do eixo filho). Para cada nó correspondente <ao cliente>, os nós correspondentes aos <pedidos> são adicionados ao resultado. Somente <Order> é retornado no conjunto de resultados.

O eixo filho é 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 Usar 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 a< Customer>, 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 de 1. A consulta usa o eixo filho no predicado para localizar o <pai do elemento Order> .

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

O eixo filho é 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á 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 Usar 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 Customer> 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ó é TRUE, porque 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 Usar 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>