Pergunta

Eu estou tentando campos de consulta da seguinte consulta XML, (que é realmente uma chamada de serviço web):

<soap:Envelope xmlns:xsi="[schema]" xmlns:xsd="[shema]" xmlns:soap="[schema]">
  <soap:Body>
    <RunPackage xmlns="http://tempuri.org/">
      <xmlDoc>
        <Request>
          <SubscriberCode>543253</SubscriberCode>
          <CompanyCode>54325</CompanyCode>
          <BranchName>TestBranchName</BranchName>
          <TempWorksUserName>TempWorksUserName</TempWorksUserName>
[...]

Com a seguinte consulta XML:

WITH XMLNAMESPACES('[schema]' AS soap2, DEFAULT '[schema]')

SELECT TransactionID, T2.Loc.query('data(Request/SubscriberCode)') as 'SubscriberCode'
FROM TempWorksRequest
CROSS APPLY RequestXML.nodes('soap2:Envelope/soap2:Body/RunPackage/xmlDoc') as T2(Loc)

Ele é executado, mas não retorna nenhum retults!

Se eu construir a mesma consulta, mas remover o material namespace então ele funciona. Por exemplo, o seguinte fina funciona:

543253 54325 TestBranchName [...]

SQL Query:

- Definir um espaço de nomes para MITS para que possamos usar o namespace MITS. COM XMLNAMESPACES ( '[esquema]' AS soap2, PADRÃO '[Esquema]')

SELECIONAR TransactionID, T2.Loc.query ( 'dados (Request / SubscriberCode)') como 'SubscriberCode' DE TempWorksRequest CROSS APPLY RequestXML.nodes ( 'xmldoc') como T2 (Loc)

Todas as idéias?

Foi útil?

Solução

encontrei o problema obrigado por Mark! Namespaces deve ser declarado explicitamente.

query New trabalho:

WITH XMLNAMESPACES('[URI1]' AS ns, '[URI2]' AS soap) 

SELECT TransactionID, 
    T2.Loc.query('data(ns:SubscriberCode)') as 'SubscriberCode',
FROM TempWorksRequest
CROSS APPLY RequestXML.nodes('soap:Envelope/soap:Body/ns:RunPackage/ns:xmlDoc/ns:Request') as T2(Loc)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top