我正在使用C#加载XML文件,但我不认为我是以最好的方式做到这一点,如果有人验证我这样做的方式是可以接受的,我真的很感激或指出我正确的方向,以更好的方式。
我只发布了我加载XML文件的部分内容,但我将这种技术用于所有内容,
XDocument doc = XDocument.Load(xmldir);
var layers = doc.Document.Descendants("Layer");
foreach (var layer in layers)
{
if (layer.Attribute("Name").Value == "Terrain")
{
LoadTerrain(layer);
}
}
// The load terrain function:
public void LoadTerrain(XElement elements)
{
var items = elements.Descendants("Items");
var element = elements.Descendants("CustomProperties").Descendants("Property");
float tileSize = 0;
string tileTexture = "";
foreach (var property in element)
{
if (property.Attribute("Name") != null)
{
string name = property.Attribute("Name").Value;
if (name == "TileSize")
{
tileSize = float.Parse(property.Attribute("Description").Value);
}
else if (name == "Texture")
{
tileTexture = property.Attribute("Description").Value;
}
}
}
PhysicShape shape = new PhysicShape(world, JabActor.BodyType.STATIC);
shape.TextureDir = tileTexture;
shape.TileSize = tileSize;
shape.Initialize();
foreach (var item in items)
{
var parts = item.Descendants("Item");
foreach (var part in parts)
{
if (part.Name == "Item")
{
element = part.Descendants("Position");
float posx = float.Parse(element.Elements("X").ElementAt(0).Value);
float posy = float.Parse(element.Elements("Y").ElementAt(0).Value);
////element = part.Descendants("Rotation");
float rot = float.Parse(part.Elements("Rotation").ElementAt(0).Value);
element = part.Descendants("Scale");
float width = float.Parse(element.Elements("X").ElementAt(0).Value);
float height = float.Parse(element.Elements("Y").ElementAt(0).Value);
shape.AddRectangle(new Vector3(posx, -posy, 0), new Vector2(width, height), rot);
}
}
}
shape.FinalizeVertices();
AddNode(shape);
}
这是XML文件:http://medsgames.com/levelg.xml
答案 0 :(得分:3)
这不错,但最好的方法是XML序列化。您可以创建一个XSD架构,您可以使用xsd.exe SDK工具创建C#代码,然后您可以使用~3行代码读取或写入XML。网上有大量关于此的信息。
答案 1 :(得分:2)
如果它有效,并按照您的需要执行,我会说它是对的。您可以为您的对象实现IXmlSerializable,并利用一些有用的序列化/反序列化框架代码,而不是自己解析xml。
首先创建架构并使用xsd.exe生成类,或者查找IXmlSerializable。
答案 2 :(得分:1)
您可以尝试将XML反序列化为C#对象。试试这篇优秀的帖子: Deserialize XML