从节点解析多个元素而不知道它们的名称

时间:2013-12-01 10:14:17

标签: c# xml linq xml-parsing

这当然是一个非常简单的问题,但我已经搜索了2页的Google搜索结果,但仍未找到答案。

基本上,我有一个像这样的XML:

<section name="section1">
     <set name="set1">value1</set>
     <set name="set2">value2</set>
     <set name="set3">value3</set>
<section>

这种结构有多个部分。

我想要做的是将其解析为字典,而不完全知道这些“集合”的名称。因此,解析后应该如下所示:

section1[set1]  <--- should contain "value1"

同样适用于set2,依此类推。

如何使用LINQ to XML实现这一目标?

2 个答案:

答案 0 :(得分:4)

var xdoc = XDocument.Load(path_to_xml);
var section1 = xdoc.Descendants("set") // or xdoc.Root.Elements()
                   .ToDictionary(s => (string)s.Attribute("name"),
                                 s => (string)s);

var set2 = section1["set2"]; // "value2"

答案 1 :(得分:2)

这里如何找到具有特定部分的元素

TextReader txtReader  = new StringReader(xml);
XDocument xDoc = XDocument.Load(txtReader);
var section1 = xDoc.Descendants("section").Where(elt=>elt.Attribute("name").ToString()=="section1").Descendants("set") 
       .ToDictionary(s => (string)s.Attribute("name"),
                     s => (string)s);