无法从XML中读取Success属性值,请求排查解决
问题根源
你的XML里的<Result>和<Success>节点属于http://tempuri.org/命名空间,但你的XPath查询没指定这个命名空间,SQL Server找不到对应节点,所以拿不到值。
解决办法
方法1:声明命名空间(推荐)
用WITH XMLNAMESPACES明确指定默认命名空间,让XPath能精准匹配节点:
DECLARE @Response VARCHAR(8000) = '<?xml version="1.0" encoding="utf-8"?> <Result xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/"> <Success>true</Success> </Result>' DECLARE @xml TABLE ( Content XML ) INSERT INTO @xml SELECT CAST(@Response AS XML) WITH XMLNAMESPACES (DEFAULT 'http://tempuri.org/') SELECT Content.value('(/Result/Success)[1]', 'BIT') AS Success FROM @xml
执行后会返回1(对应BIT类型的true),如果Success是false则返回0。
方法2:用通配符跳过命名空间(不推荐)
如果嫌麻烦,也可以用*:匹配任意命名空间的节点,但这种方式不够严谨,XML结构变化时容易出错:
DECLARE @Response VARCHAR(8000) = '<?xml version="1.0" encoding="utf-8"?> <Result xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/"> <Success>true</Success> </Result>' DECLARE @xml TABLE ( Content XML ) INSERT INTO @xml SELECT CAST(@Response AS XML) SELECT Content.value('(/*:Result/*:Success)[1]', 'BIT') AS Success FROM @xml
内容的提问来源于stack exchange,提问作者Josue Barrios
相关产品推荐
相关产品推荐

