2011-01-10 81 views
1

迭代我有数据传入文件如何通过XML使用linq2xml或XQuery

<root><![CDATA[<defs><elements> 
     <element><item>aa</item><int>1</int></element> 
     <element><item>bb</item><int>2</int></element> 
     <element><item>cc</item><int>3</int></element> 
</elements></defs>]]></root> 

写多的foreach(在root.Elements的XElement X)似乎是多余的!

寻找一种更简洁的方法最好使用C#

UPDATE - 是 - 输入是在CDATA,放心这不是我的设计,我有过它ZERO控制!

+1

你真的有你的XML数据在CDATA元素? – BrokenGlass 2011-01-10 19:18:35

回答

3

假设讨厌CDATA部分是故意的,而你只能在你的片式元件的文本内容感兴趣,你可以这样做:

XElement root = XElement.Load(yourFile); 
var data = from element in XElement.Parse(root.Value).Descendants("element") 
      select new { 
       Item = element.Elements("item").First().Value, 
       Value = element.Elements("int").First().Value 
      }; 

也就是说,如果代码生成的输入文件是在你的控制下,考虑摆脱CDATA部分。以这种方式将XML存储在XML中并不是大多数情况下的方式,因为它破坏了标记语言的用途(并且需要多次解析器传递,如上所示)。