使用 XmlTextReader 循环访问具有相同名称的 XML 属性



我正在使用XmlTextReader做一些练习代码。我编写了一些非常基本的 XML,如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<task name="mixed_sprite_task_test">
    <sprite>
        <type>animatedSprite</type>
        <id>0</id>
        <name>animatedSprite</name>
        <fileName>iyezoz</fileName>
        <startingPositionX>200</startingPositionX>
        <startingPositionY>200</startingPositionY>
        <sheetSizeX>12</sheetSizeX>
        <sheetSizeY>35</sheetSizeY>
        <startingFrameX>0</startingFrameX>
        <startingFrameY>0</startingFrameY>
        <startingState>standing</startingState>
        <movementSpeed>15</movementSpeed>
        <frameDelay>0.055</frameDelay>
    </sprite>
    <sprite>
        <type>staticSprite</type>
        <id>0</id>
        <name>staticSprite</name>
        <fileName>Super_Mario_63</fileName>
        <startingPositionX>0</startingPositionX>
        <startingPositionY>0</startingPositionY>
    </sprite>
    <sprite>
        <type>simpleSprite</type>
        <id>0</id>
        <name>simpleSprite</name>
        <fileName>imgres</fileName>
        <startingPositionX>100</startingPositionX>
        <startingPositionY>100</startingPositionY>
        <movementSpeed>15</movementSpeed>
    </sprite>
</task>

此文件显示我有一个task。在任务中,我有 3 sprite。在我的代码中,我想遍历每个sprite并收集信息。

我可以毫无问题地从第一个sprite获取数据。有没有某种方法可以遍历具有相同名称属性的 xml?

谢谢!

我更喜欢Linq2Xml。

var xDoc = XDocument.Parse(xmlstring); //or XDocument.Load(filename);
var sprites = xDoc.Descendants("sprite")
                .Select(s=>s.Elements()
                            .ToDictionary(e=>e.Name.LocalName,e=>(string)e))
                .ToList();

您可以将其用作

var type = sprites[0]["type"];

或者可以采取安全措施

string delay;
if (sprites[1].TryGetValue("frameDelay", out delay))
{
    Console.WriteLine(delay);
}

可以选择所有名为"sprite"的节点

  var myXml = new XmlDocument();
  myXml.Load(myDocument);
  XmlNode rootElement = myXml.DocumentElement;
  foreach (XmlNode item in rootElement.SelectNodes(@"/task/sprite"))
  {
      // do stuff with node        
  }

最新更新