如何使用“nodes”命令在SQLXML查询中使用名称空间?
我试图从以下XML查询中查询字段,这实际上是一个web服务调用:如何使用“nodes”命令在SQLXML查询中使用名称空间?,sql,xml,xsd,xml-namespaces,Sql,Xml,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> <Su
<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>
[...]
它运行但不返回任何重试
如果我构建了相同的查询,但删除了名称空间的内容,那么它就可以工作了。例如,以下方法可以很好地工作:
543253
54325
TestBranchName
[……]
SQL查询:
-为MIT定义名称空间,以便我们可以使用MIT名称空间。
使用XMLNAMESPACES“[schema]”
与soap2一样,默认为
“[schema]”
选择TransactionID,
T2.Loc.将“dataRequest/SubscriberCode”查询为“SubscriberCode”
从临时工作请求
交叉应用RequestXML.nodes'xmlDoc'作为T2Loc
有什么想法吗?找到了问题,谢谢马克!名称空间必须显式声明 新的工作查询:
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)
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)