好的,我有这个XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Item>
<Name>Iron Repeater</Name>
<AutoReuse>true</AutoReuse>
<UseAnimation>19</UseAnimation>
<UseTime>19</UseTime>
<Width>50</Width>
<Height>18</Height>
<Shoot>1</Shoot>
<UseAmmo>1</UseAmmo>
<UseSound>5</UseSound>
<Damage>39</Damage>
<ShootSpeed>11</ShootSpeed>
<NoMelee>true</NoMelee>
<Value>200000</Value>
<Ranged>true</Ranged>
<Rarity>4</Rarity>
<Knockback>2.5</Knockback>
<CraftStack>1</CraftStack>
<CraftItem1>Wood</CraftItem1>
<CraftValue1>1</CraftValue1>
<CraftTile1>18</CraftTile1>
<FinishCrafting/>
</Item>
它的读法与此类似:
foreach (string s in API.itemFiles)
{
using (XmlReader reader = XmlReader.Create(s))
{
string aTile;
string aStack;
string item;
string iName;
int tile;
int stack;
int iStack;
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
//Le cases here
}
}
}
}
}
}
API.itemFiles是:
public static string[] itemFiles = Directory.GetFiles(itemSave, "*.xml");
每当我尝试以这种方式读取XML文件时,它似乎不会将元素内容(我将readElementContentAsXX();)解析为变量或其他任何内容,但它似乎确实找到了元素。
我有什么问题吗?我还能改进什么吗?如果有任何其他方法来读取XML(它将计划有大量的XML文件;我需要它有效)请说出来!
谢谢!
答案 0 :(得分:2)
我找不到任何明确错误的解决方案。当我测试它时,启用reader.Name
。
我建议使用更传统的XML格式。而不是编号元素,您将它们移动到子元素:
<Item>
...
<Stacks>
<Stack>
<Item>Wood</Item>
<Value>1</Value>
<Tile>18</Tile>
</Stack>
</Stacks>
</Item>
然后,您可以使用XML对象序列化来解析文件。它不会出错。
public class Item
{
public string Name;
public bool AutoReuse;
public int UseAnimation;
public int UseTime;
public int Width;
public int Height;
public int Shoot;
public int UseAmmo;
public int UseSound;
public int Damage;
public int ShootSpeed;
public bool NoMelee;
public int Value;
public bool Ranged;
public int Rarity;
public decimal Knockback;
public List<Stack> Stacks;
}
public class Stack
{
public string Item;
public int Value;
public int Tile;
}
XmlSerializer x = new XmlSerializer(typeof(Item));
var item = (Item) x.Deserialize(steam);
答案 1 :(得分:0)
“大量的XML文件”不是问题;当你有一个单一XML文件的庞大巨石时,它只会成为一个问题。由于您没有,请使用DOM。 XmlDocument或XDocument都可以轻松处理这个问题,并且比XmlReader更容易使用。如果你要映射到类(或可以做),XmlSerializer将是一个不错的选择。
如果没有广泛的知识和/或调试(相反,XmlWriter是轻而易举的),XmlReader很难强大地使用。