どのように私は、「ノード」コマンドを使用して、SQL XMLクエリで名前空間を使用することができますか?

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

  •  13-09-2019
  •  | 
  •  

質問

私は(実際には、Webサービスの呼び出しである)、次のXMLクエリからフィールドを照会しようとしています:

<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>
[...]

次の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)

これは、任意のretultsを返しませんが、実行されます!

私は、同じクエリを構築しますが、名前空間のものを削除する場合は

それが動作します。たとえば、次の例は、正常に動作します:

  

  <要求>      543253      54325      TestBranchName   [...]

SQLクエリます:

  

- 私たちはMITSの名前空間を使用できるようにMITSの名前空間を定義します。   XMLNAMESPACES( '[スキーマ]' WITH   AS SOAP2、DEFAULT   '[スキーマ]')

     

TRANSACTIONIDを選択、     'SubscriberCode' とT2.Loc.query( 'データ(要求/ SubscriberCode)')   TempWorksRequest FROM   CROSS T2(LOC)としてRequestXML.nodes( 'XMLDOC')を適用

任意のアイデア?

役に立ちましたか?

解決

マークの発行感謝を発見!名前空間は、明示的に宣言する必要があります。

新規WORKINGクエリます:

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top