从下面的数据中我如何获得我需要的示例输出中显示的国家/地区名称(此部分在我尝试的查询中????????????????
)
declare @xml xml =
'<animals>
<dog>
<country>
<australia>Perth</australia>
</country>
</dog>
<cat>
<country>
<USA>Miami</USA>
</country>
</cat>
<horse>
<country>
<Spain>Madrid</Spain>
</country>
</horse>
</animals>'
select
col.value('local-name(.)','char(20)') as animal
,col.value('local-name(country/*/.)', 'varchar(25)') as country /* ?????????? */
,col.value('(*)[1]', 'varchar(25)') as city
from @xml.nodes('/animals/*') tab(col)
预期产出:
animal country city
------------------------------
dog australia Perth
cat USA Miami
horse Spain Madrid
答案 0 :(得分:0)
您可以在animals
级别的孩子上,然后在country
级别的孩子上粉碎XML两次。这样您就可以在两个元素上选择local-name()
:
.....
select
animals.value('local-name(.)','char(20)') as animal
,country.value('local-name(.)', 'varchar(25)') as country
,country.value('.', 'varchar(25)') as city
from @xml.nodes('/animals/*') T1(animals)
cross apply T1.animals.nodes('country/*') T2(country)
<强> rextester demo
强>