【问题标题】:How do Extract information from a very generic xml document?如何从非常通用的 xml 文档中提取信息?
【发布时间】:2012-10-18 13:35:40
【问题描述】:

我的 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);

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

【问题讨论】:

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


    【解决方案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]);
    

    【讨论】:

    • 我能问一下,如果我有另一个我不太关心的部分称为“
      ...
      ”,那会发生什么变化(对不起,我忘记了——它只有在你的代码运行良好时才会出现!)
    • @Sisyphus:你是什么意思,你能更新一下你的问题吗?
    • 感谢@Cuong - 进行了编辑以包含我不需要的第二个
      部分。
    【解决方案2】:

    Sort XML nodes alphabetically on attribute name

    检查上面的示例

    在导航器中尝试使用

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

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

    【讨论】:

    • 感谢您的链接,它给了我这个...'myXml.Descendants("cell")' ...我认为这可能有助于深入了解 xml 文档 - 我正在查看我认为是顶级。
    猜你喜欢
    • 2012-07-01
    • 2014-03-31
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2015-09-03
    相关资源
    最近更新 更多