我正在尝试使用通配符*
使用TSQL读取xml元素名称,但我无法使其工作:下面的查询返回空白,试图读取名为'xs_address'的元素
<TestXML>
<Properties />
<Body>
<xs_name Type="text" Value="John Smith" />
<xs_address Type="text" Value="123 Fake Street" />
</Body>
</TestXML>
查询:
SELECT
@x.value('local-name((/TestXML/Body/*:_address)[1])','VARCHAR(30)') AS ElementName
我需要阅读的元素有时在下划线之前有不同的名称,例如dis_address
我如何确保始终阅读正确的元素?
答案 0 :(得分:1)
尝试以下方法之一:
DECLARE @x XML=N'<TestXML>
<Properties />
<Body>
<xs_name Type="text" Value="John Smith" />
<xs_address Type="text" Value="123 Fake Street">abc</xs_address>
</Body>
</TestXML>'
SELECT ElementName FROM (
SELECT c.value('local-name(.)','varchar(30)') AS ElementName
FROM @x.nodes('/TestXML/Body/*') T(c)
) q WHERE ElementName LIKE '%[_]address'
SELECT @x.value('local-name((/TestXML/Body/*)
[contains(local-name(),"_address")]
[1])','varchar(30)') AS ElementName
SELECT @x.value('local-name((/TestXML/Body/*)
[substring(local-name(),string-length(local-name())-7,8)="_address"]
[1])','varchar(30)') AS ElementName
稍后编辑:
在某些情况下,这三个查询的结果略有不同: