如何从XML变量读取数据?

问题描述:

我受够了如下格式的XML变量,我确实需要dinamically读取并加载到一些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:for a given element,返回它的所有子元素)。

现在,我已经写了这个T-SQL来获得subElements属性给出一个元素的名字,但我得到一个空值:

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

分辨率

post帮助我清除我的问题。感谢所有回应的人。

我从查询开始去除 'N' char和工程:)

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

也会如果N功是在正确的位置,例如'@ InputXml.nodes(N'/ Root/...' – 2012-03-12 22:35:51

试试这个:

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

结果:

subelementFielName 
+1

我认为N应该仍然处于开始阶段(恰好在正确的位置),以涵盖真正的Unicode数据所包含的外部机会,元素名称。 – 2012-03-12 22:36:40

+0

谢谢@Aaron – G21 2012-03-13 15:23:19