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 に答える