作为嵌入式资源的XML数组

本文关键字:XML 数组 资源 嵌入式 | 更新日期: 2023-09-27 18:07:22

我一直在试图找到一个好的干净的方式来加载XML文件的内容到一个数组中使用,但我只找到部分答案在这里和那里。为了简单起见,我的XML文件是一个嵌入式资源,包含大约115个元素的列表,这些元素都包含一个idname属性。

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));
        }
    }

这是我的代码,这将理想地设置这个数组为我使用,虽然它是相当破碎,由于我尝试不同的东西,但我认为它传达了一般的想法。希望有人能弄明白,并向我解释我做错了什么(>.<)我很乐意提供更多的信息,澄清等,如果我错过了重要的东西!

谢谢!

作为嵌入式资源的XML数组

Using 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();

使用xpath。

XmlNodeList nodes = xml.SelectNodes("Items/Item");
foreach ( XmlNode node in nodes )
{
     int id = int.Parse(node.SelectSingleNode("id").InnerText);
}