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 one、およびXMLreaderを使用してこのxmlを読み取る方法。また、見た目は良さそうなcsharp-examples.netも調べましたが、「ノードセットに至らない」というエラーが発生し続けました。

これを見つけたとき、私は興奮しました。xml属性値を取得しますが、喜びはありません。それらが1つだけではないようです。

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

現在のものがnullかどうかを確認することを忘れないでください

于 2012-10-18T04:47:26.587 に答える