Получение значения из моего xml

Я не уверен, что правильный элемент / узел / или любое другое имя для возврата этого значения, но вот мой пример xml:

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

То, что я пытаюсь получить отсюда, является результатом "myValue". Буквенная строка "myValue" - это то, что мне нужно. Таким образом, возможно, имя первого узла может быть правильным способом его формулировки? Вот что я пробовал, куда я иду не так?

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

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

2 ответа

Этот вопрос совершенно неясен...

Посмотрите на этот пример, чтобы найти различные подходы, чтобы прочитать это:

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" - просто пример...

Пожалуйста, прочтите Как задать хороший вопрос SQL и Как создать 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)

Я понял это, извините, что беспокою. Я не уверен, что технический термин того, что я искал здесь, но в моем случае узел 'myValue' содержит имя объекта dbo.Table, который мне нужен для динамического запроса.

SELECT Nodes.Name.query('local-name(.)') 
FROM @Input.nodes('/root/*[1]') As Nodes(Name)
Другие вопросы по тегам