KTF*_*KTF 4 xml sql xsd xml-namespaces
我正在尝试从以下XML查询中查询字段(这实际上是一个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>
[...]
Run Code Online (Sandbox Code Playgroud)
使用以下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)
Run Code Online (Sandbox Code Playgroud)
它运行但不会返回任何报复!
如果我构建相同的查询,但删除名称空间的东西,那么它的工作原理.例如,以下工作正常:
<xmlDoc> <Request> <SubscriberCode> 543253 </ SubscriberCode> <CompanyCode> 54325 </ CompanyCode> <BranchName> TestBranchName </ BranchName> [...]
SQL查询:
- 为MITS定义命名空间,以便我们可以使用MITS命名空间.WITH XMLNAMESPACES('[schema]'AS soap2,DEFAULT'[schema]')
SELECT TransactionID,T2.Loc.query('data(Request/SubscriberCode)')'SubscriberCode'FROM TempWorksRequest CROSS APPLY RequestXML.nodes('xmlDoc')as T2(Loc)
有任何想法吗?
发现问题感谢马克!必须显式声明命名空间.
新的工作查询:
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)
Run Code Online (Sandbox Code Playgroud)