如何从非常通用的xml文档中提取信息?

时间:2012-10-18 04:39:51

标签: c# xml visual-studio-2010 xmlreader

我的xml文档如下(但更大,与出生日期信息无关)。它是由一种方法生成的,我想从中访问信息。

我想查找像John或Hannah这样的“名字”并从下一行获取DOB,也许可以将它们放入Dictionary<string,string>以供日后查找。

文档始终采用此形式,名称是唯一的。我只需要第一部分名称=“DOBs”。

<info>
  <section name="DOBs">
   <table>
    <headers>
      <cell value="Name" />
      <cell value="DOB" />
    </headers>
    <row>
      <cell value="John" />
      <cell value="121245" />
    </row>
    <row>
      <cell value="Hannah" />
      <cell value="050595" />
    </row>
   </table>
  </section>
  <section name="notDOBs">
   <table>
    <headers>
      <cell value="Name" />
      <cell value="other info" />
    </headers>
    <row>
      <cell value="Hannah" />
      <cell value="blue" />
    </row>
    ....
    </table>
  </section>
</info>

我尝试了什么? - 说实话,不是很多,因为我对xml一般感到困惑。我查看了一些SO条目:Xml ReaderThis oneHow to use XMLreader to read this xml。我还看了csharp-examples.net看起来不错,但我一直收到“不会导致节点设置”的错误。

当我发现这个时,我很兴奋:get xml attribut values但没有快乐,似乎没有找到它们。

var myXml = XElement.Load(_myPath).Elements();
var myArray = myXml.Elements("cell").Attributes("value").Select(n => n.Value);

我知道我还有很多工作要做,但有时你只需咬紧牙关问一下......有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

var list = XDocument.Load("C:\\test.xml")
            .Descendants("section")
            .Where(e => e.Attribute("name").Value.Equals("DOBs"))
            .Descendants("row")
            .Descendants("cell")
            .Attributes("value").ToList();

var dic = Enumerable.Range(0, list.Count/2)
    .ToDictionary(i => list[2*i], i => list[2*i + 1]);

答案 1 :(得分:0)

Sort XML nodes alphabetically on attribute name

检查以上示例

导航器中的

尝试使用

      .MoveFirstChild() method
      .MoveNext() method
      .MoveToFirstAttribute() method
      .MoveToNextAttribute() method
      .Name property
      .Value property

不要忘记检查当前的是否为空