Как читать данные из переменной XML? - PullRequest
2 голосов
/ 13 марта 2012

У меня есть переменная xml с указанным ниже форматом, и мне нужно динамически читать и загружать в некоторую структуру T-SQL имена элементов и значения соответствующих полей:

declare @InputXml   xml
Set @InputXml = '<Root RootName="rooNameValueHere">
            <Element Name="elementName">
                <SubElement Field="subelementFielName"/>
            </Element>
            <Element Name="otherElementName">
                <SubElement Field="subelementFielName1"/>
                <SubElement Field="subelementFielName2"/>
                <SubElement Field="subelementFielName3"/>
            </Element>
        </Root>'

Советы:1 - Корень может содержать N элементов 2 - Каждый элемент может содержать N подэлементов 3 - Мне нужно создать процедуру, способную извлекать как всю информацию, так и фильтровать, предоставляя одно имя элемента (например, для данного элемента,вернуть все его подэлементы).

Сейчас я написал этот T-SQL, чтобы получить подэлементы с одним именем элемента, но я получаю нулевое значение:

select 
    t.c.value('@Field', 'nvarchar(10)') AS SomeAlias
from
    @InputXml.nodes('N/Root/Element[@Name = ''elementName'']//SubElement') t(c);

Разрешение :

Эта запись поможет мне прояснить мою проблему.Спасибо всем, кто откликнулся.

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Я удалил символ 'N' из начала запроса, и он работает:)

@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c);
1 голос
/ 13 марта 2012

Попробуйте:

select 
    t.c.value('@Field', 'nvarchar(100)') AS SomeAlias
from
    @InputXml.nodes(N'/Root/Element[@Name = "elementName"]/SubElement') t(c);

Результат:

subelementFielName
...