2012-03-12 3 views
2

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

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 - Мне нужно создать подпрограмму, способную извлекать всю информацию, а также отфильтровывать ее, предоставляя одно имя элемента (ei: для данного элемента, вернуть все его подэлементы).

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

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

Разрешения:

post Это поможет мне для устранения моей проблемы. Спасибо всем, кто ответил.

ответ

2

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

@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c); 
+0

также будет работать, если N были в правильном месте, например '@ InputXml.nodes (N '/ Root/...'' –

1

Попробуйте это:

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

Результат:

subelementFielName 
+1

Я думаю, что N все равно должно быть в начале (прямо в нужном месте), чтобы покрыть внешний шанс, что истинные данные Unicode когда-либо содержались, скажем, имя элемента. –

+0

Спасибо @Aaron – G21

 Смежные вопросы

  • Нет связанных вопросов^_^