2012-08-08 3 views
0

J'essaie d'analyser un fichier XML dans une application console. Un exemple de la façon dont le code ressemble:Problème de lecture du fichier XML avec XmlDocument

  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++; 
      } 

Un exemple de XML lui-même est la suivante:

<?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> 

Mon problème est que ce ne sera pas une boucle sur les étiquettes et leurs childNodes, il prend la premier et puis saute juste le reste. Je me suis probablement coincé dans un étrange train de pensées, mais je ne peux pas voir où. : P

Toute aide serait acceptée.

Répondre

0

Vous n'êtes pas en train de parcourir les références.

Qu'est-ce que vous faites:

  • nœud parent Atteindre
  • Vérifier l'enfant à l'index H
  • Incremement H
  • congé nœud parent

Ce que vous devez faire:

  • nœud parent Atteindre
  • boucle à travers les enfants nœuds à l'aide d'un foreach
  • Vérifiez chaque enfant à l'intérieur de la foreach
  • nœud parent sortie
+0

Merci un bouquet, si simple, mais j'étais si aveugle. :) – JaggenSWE