【问题标题】:C# - Array from XML as an embedded resourceC# - 来自 XML 的数组作为嵌入式资源
【发布时间】:2011-11-08 20:53:09
【问题描述】:

我一直在尝试找到一种很好的干净方法来将 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));
        }
    }

这就是我拥有的代码,它可以理想地设置这个数组供我使用,尽管由于我尝试不同的东西,它相当糟糕,但我认为它传达了总体思路。希望有人能理解它并向我解释我做错了什么(>。

谢谢!

【问题讨论】:

    标签: c# xml visual-studio-2010 embedded-resource


    【解决方案1】:

    使用 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();
    

    【讨论】:

      【解决方案2】:

      使用 xpath。

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

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        相关资源
        最近更新 更多