C # - Массив из XML как встроенный ресурс - PullRequest
1 голос
/ 02 сентября 2011

Я пытался найти хороший чистый способ загрузки содержимого файла 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));
        }
    }

Это код, который у меня есть, который идеально настроил бы этот массив для меня, чтобы использовать его, хотя он довольно сломан из-за того, что я пробовал разные вещи, но я думаю, что он передает общую идею. Надеюсь, кто-то сможет понять это и объяснить мне, что я делаю ужасно неправильно (>. <) Я был бы рад предоставить больше информации, разъяснений и т. Д., Если я пропустил что-то важное! </p>

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 сентября 2011

Использование 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 голос
/ 02 сентября 2011

Используйте xpath.

XmlNodeList nodes = xml.SelectNodes("Items/Item");

foreach ( XmlNode node in nodes )
{
     int id = int.Parse(node.SelectSingleNode("id").InnerText);
}
...