从我的xml中获取值

时间:2017-03-22 22:53:42

标签: sql sql-server xml for-xml

我不确定返回此值的正确元素/节点/或其他名称是什么,但这里是我的示例xml:

DECLARE @Input xml = '
<root>
    <myValue>
        <more></more>
        <more></more>
    </myValue>'
<root>

我想从这里得到的是&#34; myValue&#34;的结果。文字字符串,&#34; myValue&#34;是我的要求。那么也许第一个节点的名称可能是正确的表达方式呢?这是我尝试过的,我哪里出错了?

SELECT @Input.value('local-name(/*[1])','varchar(100)')

SELECT Nodes.Name.query('local-name(.)') FROM @Input.nodes('//*[1]') As Nodes(Name)

2 个答案:

答案 0 :(得分:1)

这个问题很不清楚......

看一下这个例子,找到各种方法来阅读:

DECLARE @Input xml = 
'<root>
    <myValue>value 1
        <more>more 1</more>
        value 2
        <more>more 2</more>
        value 3
    </myValue>
</root>';

- 从不同位置检索值

SELECT @Input.value('(/root/myValue/text())[2]','nvarchar(max)') AS SecondFloatingTextInMyValue
      ,@Input.value('(/root/myValue/more/text())[1]','nvarchar(max)') FirstMoreElement
      ,@Input.value('(/root/myValue/more/text())[2]','nvarchar(max)') SecondMoreElement;

- 获取<more> - 元素

的派生表
SELECT More.Nodes.value('(./text())[1]','nvarchar(max)') AS MoreValue
FROM @Input.nodes('/root/myValue/more') AS More(Nodes)

更新

你的问题

  

我想从这里得到的是“myValue”

的价值

似乎在寻找元素的,但是 - 正如你的自我回答所介绍的那样 - 你似乎在寻找元素名称,其中“more”只是一个例子... < / p>

请阅读How to ask a good SQL questionHow to create a MCVE

更新2

阅读元素的元数据 - 正如您自己发现的那样 - 使用local-name()

DECLARE @Input xml = 
'<root>
    <myValue>
        <OneValue></OneValue>
        <Another></Another>
    </myValue>
</root>';

SELECT nd.value('local-name(.)','nvarchar(max)') AS NameOfNodeBelowMyValue
FROM @Input.nodes('/root/myValue/*') AS A(nd)

答案 1 :(得分:0)

我想通了,很抱歉打扰了。我不确定我在这里要做什么的技术术语,但在我的情况下,我的'myValue&#39; node保存动态查询所需的dbo.Table对象的名称。

SELECT Nodes.Name.query('local-name(.)') 
FROM @Input.nodes('/root/*[1]') As Nodes(Name)