1

我的 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,但我不断收到有关“未导致节点集”的错误。

当我发现这个时我很兴奋:获取 xml 属性值但没有快乐,它似乎并没有找到它们。

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

我知道我还有很多工作要做,但有时你只需要硬着头皮问……有人能帮忙吗?

4

2 回答 2

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]);
于 2012-10-18T05:06:03.190 回答
0

按属性名称的字母顺序对 XML 节点进行排序

检查上面的示例

在导航器中尝试使用

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

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

于 2012-10-18T04:47:26.587 回答