Comment puis-je utiliser les espaces de noms dans une requête SQL XML avec la commande « nœuds »?

StackOverflow https://stackoverflow.com/questions/982910

  •  13-09-2019
  •  | 
  •  

Question

Je suis en train d'interroger les champs de la requête XML suivante, (ce qui est vraiment un appel de service 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>
[...]

Avec la requête XML suivant:

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)

Il fonctionne mais ne retourne pas retults!

Si je construis la même requête mais supprimer la substance de l'espace de noms alors il fonctionne. Par exemple, ce qui suit fonctionne très bien:

  

        543253      54325      TestBranchName   [...]

requête SQL:

  

- Définir un espace de noms pour MITS afin que nous puissions utiliser l'espace de noms MITS.   AVEC XMLNAMESPACES ( '[schéma]'   AS SOAP2, DEFAULT   [Schéma] ')

     

SELECT TransactionID,     T2.Loc.query ( 'données (demande / SubscriberCode)') comme 'SubscriberCode'   DE TempWorksRequest   CROSS APPLY RequestXML.nodes ( 'xmlDoc') en tant que T2 (Loc)

Toutes les idées?

Était-ce utile?

La solution

ajoute que la question merci pour Mark! Les espaces de noms doivent être explicitement déclarés.

Nouvelle requête DE TRAVAIL:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top