如何使用linq2xml或Xquery迭代xml

时间:2011-01-10 19:17:13

标签: c# .net xml linq linq-to-xml

我有一个带有数据的传入文件

<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#

更新 - 是的 - 输入是在CDATA中,请放心,这不是我的设计,我对ZERO有控制权!

1 个答案:

答案 0 :(得分: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并不是大多数时间的方式,因为它违背了标记语言的目的(并且需要多个解析器传递,如上所示)。