我一直在努力寻找一种很好的方法来将XML文件的内容加载到数组中以供使用,但我只是在这里和那里找到了部分答案。为简单起见,我的XML文件是嵌入式资源,包含大约115个元素的列表,这些元素都包含id
和name
属性。
XML看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item>
<id>1</id>
<name>Example1</name>
</Item>
<Item>
<id>2</id>
<name>Example2</name>
</Item>
<Item>
<id>3</id>
<name>Example3</name>
</Item>
</Items>
我能够加载所有内容并在InnerXML中看到我的数据,但我无法找到如何正确访问它。
public Form1()
{
InitializeComponent();
assembly = Assembly.GetExecutingAssembly();
XmlDocument xml = null;
try
{
string filePath = "MyProject.ItemList.xml";
Stream fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(filePath);
if (fileStream != null)
{
xml = new XmlDocument();
xml.Load(fileStream);
}
}
catch {
//Do nothing
}
XmlDocument itemsFromXML = xml.DocumentElement.InnerXml;
foreach (XmlNode node in itemsFromXML)
{
int id = Convert.ToInt32(node.Attributes.GetNamedItem("id").ToString());
string name = node.Attributes.GetNamedItem("name").ToString();
gameItemList.Add(new GameItem(id, name));
}
}
这就是我所拥有的代码,理想情况下可以让我使用这个数组,虽然由于我尝试不同的东西它已经相当破碎,但我认为它传达了一般的想法。希望有人能够对它有所了解并向我解释我在做什么可怕的错误(&gt;。&lt;)如果我错过了重要的事情,我会很乐意提供更多的信息,澄清等等。
谢谢!
答案 0 :(得分:3)
使用System.Xml.Linq:
var items = XElement.Load(fileStream)
.Elements("Item")
.Select(itemXml => new {
id = (int)itemXml.Element("id").Value,
name = itemXml.Element("name").Value
})
.ToArray();
答案 1 :(得分:1)
使用xpath。
XmlNodeList nodes = xml.SelectNodes("Items/Item");
foreach ( XmlNode node in nodes )
{
int id = int.Parse(node.SelectSingleNode("id").InnerText);
}