2012-08-01 17 views
14

मेरे पास एक एक्सएमएल फ़ाइल है और मैं प्रत्येक बच्चे नोड एकत्रित जानकारी के बावजूद पुन: प्रयास करना चाहता हूं।हालांकि मैं प्रत्येक बच्चे को किसी XML फ़ाइल में नोड कैसे कर सकता हूं?

यहां मेरा सी # कोड है, यह केवल एक नोड उठाता है, फ़ील्डडाटा मैं अपने बच्चे नोड्स पर एक foreach का उपयोग करना चाहता हूं।

<?xml version="1.0"?> 
<FieldData> 
    <property_details_branch IncludeInPDFExport="Yes" Mod="20010101010101"/> 
    <property_details_inspection_date IncludeInPDFExport="Yes" Mod="20120726200230">20120727220230+0200</property_details_inspection_date> 
    <property_details_type_of_ownership IncludeInPDFExport="Yes" Mod="20120726134107">Freehold</property_details_type_of_ownership> 
</FieldData> 
+0

मैं बस, नोट करने के लिए शून्य करने के लिए अपने 'foreach' पाश में आपके द्वारा सेट किए' Count' चीजें करते चाहूँगा मेरी एक्सएमएल में बच्चे नोड्स में आगे बढ़ने की नीचे कोड का इस्तेमाल किया, वेतन वृद्धि यह और शून्य पर वापस सेट। –

उत्तर

18

आप FieldData नोड्स पुनरावृत्ति कर रहे हैं और आप केवल एक है:

public void LoadXML() { 
    if (File.Exists("Data.xml")) { 
     //Reading XML 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.Load("Data.xml"); 

     //Think something needs to reference Child nodes, so i may Foreach though them 

     XmlNodeList dataNodes = xmlDoc.SelectNodes("//FieldData"); 
     TagContents[] ArrayNode; 

     foreach(XmlNode node in dataNodes) { 
      int Count = 0; 
      //int Max = node.ChildNodes.Count; 
      ArrayNode = new TagContents[Max]; 

      ArrayNode[Count].TagName = node.Name; 
      ArrayNode[Count].TagValue = node.SelectSingleNode(ArrayNode[Count].TagName).InnerText; 
      Count = Count + 1;   
     } 
    } else { 
     MessageBox.Show("Could not find file Data.xml"); 
    } 
} 

मेरे एक्सएमएल तरह दिखता है। पुनरावृति करने के लिए अपने बच्चे नोड्स लिखें:

var doc = XDocument.Load("XMLFile1.xml"); 
    foreach (var child in doc.Element("FieldData").Elements()) 
    { 
    Console.WriteLine(child.Name); 
    } 
+1

यह foreach नहीं होना चाहिए (नोड में XmlNode childNode.ChildNodes)? – Rox

+0

आप सही हैं। मैं XDocument –

+0

पर उपयोग करता हूं धन्यवाद यह काम करता है: डी मैं इतने लंबे समय तक संघर्ष कर रहा था। – Pomster

5

मैं आम तौर पर बात की इस तरह के पसंद करते हैं Linq-To-Xml

XDocument doc = XDocument.Load(@"Data.xml"); 
    TagContents[] ArrayNode = doc.Root 
           .Elements() 
           .Select(el => 
            new TagContents() 
            { 
             TagName = el.Name.ToString(), 
             TagValue = el.Value 
            }) 
           .ToArray(); 
2

आप इस तरह यह कर सकते हैं:

foreach (XmlNode node in dataNodes) 
{ 
    foreach (XmlNode childNode in node.ChildNodes) 
    { 
4

या आप प्रत्यावर्तन का उपयोग करें:

public void findAllNodes(XmlNode node) 
    { 
     Console.WriteLine(node.Name); 
     foreach (XmlNode n in node.ChildNodes) 
      findAllNodes(n); 
    } 

आप पेलोड कहां रखते हैं इस पर निर्भर करता है कि आप किस प्रकार की खोज का उपयोग करना चाहते हैं (उदा। चौड़ाई पहली खोज, गहराई-पहली खोज, आदि; http://en.wikipedia.org/wiki/Euler_tour_technique देखें)

0

बस @Waynes उत्तर पर छू रहा है, जो अच्छी तरह से काम करता है। मैं

foreach (var child in doc.Element("rootnodename").Element("nextchildnode").Elements()) 

{ 

//do work here, probs async download xml content to file on local disc 

} 
0
public void ValidateXml(string[] Arrays) 
    {           
     foreach (var item in Arrays) 
     { 
      Xdoc.Load(item);        
      XmlNodeList xnList = Xdoc.SelectNodes("FirstParentNode"); 
      if (xnList.Count > 0) 
      { 
       foreach (XmlNode xn in xnList) 
       { 
        XmlNodeList anode = xn.SelectNodes("SecondParentNode"); 
        if (anode.Count > 0) 
        { 
         foreach (XmlNode bnode in anode) 
         {        
          string InnerNodeOne = bnode["InnerNode1"].InnerText; 
          string InnerNodeTwo = bnode["InnerNode1"].InnerText; 

         }       
        } 
        else 
        { 
         ErrorLog("Parent Node DoesNot Exists");             
        } 
       }     
      } 
      else 
      { 
       ErrorLog("Parent Node DoesNot Exists"); 
      } 

     } 
     //then insert or update these values in database here 
    } 
संबंधित मुद्दे