2015-11-23 147 views
-1

我的XML看起來是這樣的:解析XML的節點,然後子節點

<data> 
    <location ....> 
     <stores> 
     <store ....></store> 
     <store ... ></store> 
     </stores> 
    </location> 
</data> 

我想通過所有位置的元素循環,並通過所有的商店,然後循環。

我也想訪問位置和商店元素的屬性。

我已加載的XML文檔:

var doc = new XmlDocument(); 
doc.LoadXml(myXmlAsString); 

回答

0

如果你不想使用的XmlSerializer來獲取類型化的數據,你可以用的SelectSingleNode或方法的SelectNodes標準得到節點。這將使您能夠遍歷位置元素。 我建議創建類反序列化,因爲它更容易處理。

0

遍歷地點:

XmlNodeList xnList = doc.SelectNodes("/data/location"); 
      foreach(XmlNode node in xnList) 
      { 
        //your code goes here.. 
      } 

遍歷所有專賣店:

XmlNodeList xnList = doc.SelectNodes("/data/location/stores"); 
      foreach(XmlNode node in xnList) 
      { 
        //your code here.. 
      } 
+0

對不起,我想遍歷商店,但仍然有權訪問當前位置。 –

1

比方說,這是你的樣品XML

<data> 
    <location sample="something"> 
     <stores> 
     <store atrb="1">store1</store> 
     <store atrb="2">store2</store> 
     </stores> 
    </location> 
    <location> 
     <stores>....</stores> 
    </location> 
</data> 

然後使用System.Xml.LinqXDocument,您可以訪問所有地點,商店和thei r這樣的屬性

var xmlString = File.ReadAllText(@"C:\YourDirectory\YourFile.xml"); 
XDocument geneva = XDocument.Parse(xmlString); 

var locations = geneva.Descendants("location"); 
foreach (var location in locations) 
{ 
    var sampleAttribute = location.Attribute("sample").Value; 
    var stores = location.Descendants("store"); 
    foreach (var store in stores) 
    { 
     var value = store.Value; 
     var atrbValue = store.Attribute("atrb").Value; 
    } 
}