XML / C#循环通过相同名称的节点

时间:2015-10-29 12:40:33

标签: c# xml

我有这个包含键和值的XML文件,我目前循环遍历XML文档,并且我读取了所有数据。

但是,我有一些关键词'或者'节点'具有相同的键名,但具有不同(或相同)的值。 我需要遍历同一父节点中的这些相同节点。

<tile>
   <x>0</x>
   <y>1</y>
   <name>Grass</name>
   <entity>Tree</entity>
   <entity>Building</entity>
   <entity>Something</entity>
</tile>
<tile>
   <x>1</x>
   <y>2</y>
   <name>Dirt</name>
   <entity>Tree</entity>
   <entity>Building</entity>
</tile> 

我需要获取X,Y和Name,以及实体的数组/列表。 这需要XML中的每个Tile。

所以我需要遍历所有内容并获取内容,包括带有

的列表

当前代码:

        XmlElement element = doc.DocumentElement;
        XmlNodeList nList = element.SelectNodes("/map/tile");
        foreach(XmlNode node in nList){
            int x = int.Parse(node["x"].InnerText);
            int y = int.Parse(node["y"].InnerText);
            String materialName = node["name"].InnerText;
            for(node["entity"] in allEntityNodesWithinThisTile){ }
        }

由于

2 个答案:

答案 0 :(得分:2)

string xml = @"<tile>
   <x>0</x>
   <y>1</y>
   <name>Grass</name>
   <entity>Tree</entity>
   <entity>Building</entity>
   <entity>Something</entity>
</tile>";

var data = from t in XElement.Parse(xml).DescendantsAndSelf("tile")
select new {
   X=(int)t.Element("x"),
   Y=(int)t.Element("y"),
   Name=(string)t.Element("name"),
   Entities= t.Elements("entity").Select (x => x.Value)
};

答案 1 :(得分:0)

var data = from t in XElement.Load(xmlFileName).DescendantsAndSelf("tile")
select new {
   X=(int)t.Element("x"),
   Y=(int)t.Element("y"),
   Name=(string)t.Element("name"),
   Entities= t.Elements("entity").Select (x => x.Value)
};