2012-08-08 55 views
0

我想解析控制台应用程序中的XML文件。的代码看起来是一个例子:使用XmlDocument读取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> 

我的问题是,它不会通过标签和他们的childNodes循环时,会在第一个,然后跳过其余的。我可能陷入了一些奇怪的想法,但我不知道在哪里。 :P

任何帮助将很乐意接受。

回答

0

你实际上并没有循环引用。

你在做什么:

  • 关爱父节点
  • 检查孩子在索引h的
  • Incremement^h
  • 离开父节点

你需要做什么:

  • 河段父节点
  • 遍历孩子节点使用foreach
  • 检查每个孩子在foreach内部
  • 退出父节点
+0

多谢你,就这么简单,但我是如此盲目。 :) – JaggenSWE 2012-08-08 15:02:23

相关问题