0

我正在用 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. 在任务中我有 3sprite秒。在我的代码中,我想遍历每个sprite并收集信息。

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

谢谢!

4

2 回答 2

4

我更喜欢 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);
}
于 2012-12-02T22:15:07.273 回答
2

您可以选择所有名为“sprite”的节点

  var myXml = new XmlDocument();
  myXml.Load(myDocument);
  XmlNode rootElement = myXml.DocumentElement;
  foreach (XmlNode item in rootElement.SelectNodes(@"/task/sprite"))
  {
      // do stuff with node        
  }
于 2012-12-02T22:15:55.300 回答