我有一个我需要粉碎的xml。但我收到此错误XQuery [nodes()]: The name "s" does not denote a namespace.
我有以下格式的xml
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:somename-com:Access.2012.Services.Patient.GetCensus</a:Action>
</s:Header>
<s:Body>
<GetCensusByUnitResponse xmlns="urn:somename-com:Access.2012.Services.Patient">
<GetCensusByUnitResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<BeddedPatients>
<BeddedPatient>
...
...
...
</GetCensusByUnitResult>
</GetCensusByUnitResponse>
</s:Body>
</s:Envelope>
;with xmlnamespaces('urn:Epic-com:Access.2012.Services.Patient' as ep,
'http://www.w3.org/2003/05/soap-envelope' as s,
'http://www.w3.org/2005/08/addressing' as a,
'http://www.w3.org/2001/XMLSchema-instance' as i)
但是当尝试使用xquery将其粉碎时,它会给我错误。
为了粉碎,我写了以下查询:
select x.n.value('(ep:AccommodationCode)[1]', 'varchar(128)') as accomdationCode
from @xml.nodes('/s:Envelope/s:Body/ep:GetCensusByUnitReeponse/ep:GetCensusByUnitResult/ep:BeddedPatients/ep:BeddedPatient') x(n)
有人可以告诉我可能有什么问题吗?提前致谢。
答案 0 :(得分:1)
似乎 Ankur 在他/她的问题正文中添加了正确答案。 T-sql在 select语句之前需要名称空间声明:
WITH XMLNAMESPACES ( <XML namespace declaration item> [ { , <XML namespace declaration item> }...] )
它仍在MS SQL 2016上运行。
答案 1 :(得分:0)
您需要声明名称空间前缀,以便它们在查询执行上下文中可用(而不仅仅是在文档中)。我不熟悉SQL Server的XQuery执行引擎,但它必须具有一些声明命名空间的工具。您需要找到 - 或 - 您可能会考虑使用本机XML数据库,因此您不需要“粉碎”。