如何获取xml标记值?

时间:2017-10-29 18:13:17

标签: sql-server xml xquery

从下面的数据中我如何获得我需要的示例输出中显示的国家/地区名称(此部分在我尝试的查询中????????????????

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

1 个答案:

答案 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