我们需要在sql server中读取一个xml文件,但是我们遇到了问题,因为xml有一个命名空间,我已经尝试了几个解决方案,但我无法解决问题。
xml文件看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Status:orders xmlns:Status="http://www.test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com Status.xsd">
<order>
<Header>
<Name>500039</Name>
<Letter>A</Letter>
</Header>
</order>
</Status:orders>
可以帮助您检索如何检索名称和字母标记的值
提前感谢。
答案 0 :(得分:0)
您的朋友被称为WITH XMLNAMESPACES
...
尝试这样
DECLARE @xml XML=
'<?xml version="1.0" encoding="UTF-8"?>
<Status:orders xmlns:Status="http://www.test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com Status.xsd">
<order>
<Header>
<Name>500039</Name>
<Letter>A</Letter>
</Header>
</order>
</Status:orders>';
WITH XMLNAMESPACES('http://www.test.com' AS Status)
SELECT @xml.value('(/Status:orders/order/Header/Name)[1]','int')
,@xml.value('(/Status:orders/order/Header/Letter)[1]','varchar(max)');
另一种方法是使用星号。
SELECT @xml.value('(/*:orders/order/Header/Name)[1]','int')
,@xml.value('(/*:orders/order/Header/Letter)[1]','varchar(max)');
另一种选择是:
SELECT @xml.value('(//Name)[1]','int')
,@xml.value('(//Letter)[1]','varchar(max)');
但总的来说,尽可能具体,这是一个很好的建议......