0

コンソール アプリケーション内で XML ファイルを解析しようとしています。コードがどのように見えるかの例:

            xml_nl = xml_d.SelectNodes("/exchange/messages/message");

        foreach (XmlNode xml_n in xml_nl)
        {

            XmlNodeList xml_ml = xml_n.SelectNodes("header");

            int h = 0;

            foreach (XmlNode xml_mhn in xml_ml)
            {
                if (xml_mhn.ChildNodes.Item(h).Name == "reference")
                {
                    switch (xml_mhn.ChildNodes.Item(h).Attributes["type"].Value)
                    {
                        case "CU":
                            senderRef = xml_mhn.ChildNodes.Item(h).ChildNodes.Item(0)["referencevalue"].InnerText.ToString();
                            break;
                        case "AAJ":
                            bulkRef = xml_mhn.ChildNodes.Item(h).ChildNodes.Item(0).InnerText.ToString();
                            break;
                        default:
                            break;
                    }
                } 
                    h++;
            }

XML 自体の例は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<exchange>
<exchangedetails>
    <exchangeref>00073281985000</exchangeref>
    <exident>1Q54A3</exident>
    <exchangedate>2012-06-22</exchangedate>
    <exchangetime>23:24:00</exchangetime>
</exchangedetails>
<messages>
    <message id="1">
        <header>
            <reference type="DM">
                <referencevalue>73500534821183387</referencevalue>
            </reference>
            <reference type="CU">
                <referencevalue>28-0686668</referencevalue>
            </reference>
            <reference type="AAJ">
                <referencevalue>28-0686668</referencevalue>
            </reference>
            <reference type="AQY">
                <referencevalue>9024</referencevalue>
            </reference>
                           </header>
                        </message>
                  </exchange>

私の問題は、タグとその子ノードをループしないことです。最初のものを取り、残りをスキップします。奇妙な思考回路に行き詰まったのかもしれませんが、どこにあるのかわかりません。:P

どんな助けでも喜んで受け入れます。

4

1 に答える 1

0

実際には参照をループしていません。

あなたがしていること:

  • 親ノードに到達
  • インデックス H の子をチェック
  • 増分H
  • 親ノードを離れる

するべきこと:

  • 親ノードに到達
  • foreach を使用して子ノードをループする
  • foreach 内の各子をチェックする
  • 親ノードを終了
于 2012-08-08T15:01:41.433 に答える