如何选择'值'在这个回报中。
<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>
我试过了
DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'
SELECT @XML.value('(/int)[1]', 'varchar(30)')
FROM @xml.nodes('/int') Tbl ( Col )
但我没有回报。
答案 0 :(得分:2)
您可以为命名空间定义别名,然后在xpath中使用该别名。
如果不指定命名空间,xpath只会找到没有命名空间的标记。
或者您可以在xpath中查找任何名称空间*:
例如:
DECLARE @XML XML = N'<xml>
<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>
<int>123</int>
</xml>';
-- method 1
;WITH XMLNAMESPACES('http://schemas.microsoft.com/2003/10/Serialization/' AS s)
SELECT Col.value('.', 'int') as Col
FROM @XML.nodes('//s:int') Tbl (Col);
-- method 2
SELECT Col.value('.', 'int') as Col
FROM @XML.nodes('//*:int') Tbl (Col);
注意方法1只找到第一个值,而方法2找到两个值。
答案 1 :(得分:0)
尝试以下
DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'
SELECT Col.value('(.)[1]', 'int')
FROM @xml.nodes('//*') As Tbl (Col )
答案 2 :(得分:0)
此问题是您的XML位于已定义的命名空间中,并且您尝试使用“默认命名空间”进行选择。
要解决此问题,您应该在选择中定义命名空间:
DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'
SELECT @XML.value('declare namespace ns="http://schemas.microsoft.com/2003/10/Serialization/"; (/ns:int)[1]', 'varchar(30)' )
FROM @xml.nodes('/') Tbl ( Col )