2015-11-23 148 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; 
    } 
}