XML读取两个元素内的文本

时间:2013-07-08 14:35:52

标签: c# xml

这是我的xml代码:

<?xml version="1.0" encoding="utf-8"?>  
<updater>  
  <version>1.0.7</version>
  <Enabled>true</Enabled>

  <item>
    <url>some url</url>
    <name>file name</name>
  </item>

  <item>
    <url>other url</url>
    <name>other file name</name>
  </item>

</updater>

如何在两个项目元素中获取url和name的值?完整代码有9个元素,名称为item。请使解决方案符合以下代码:

XmlTextReader reader = null;
        try
        {
            string xmlURL = "someurl";
            reader = new XmlTextReader(xmlURL);
            reader.MoveToContent();
            string elementName = "";
            if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "updater"))
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element) elementName = reader.Name;
                    else
                    {
                        if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue))
                        {
                            switch (elementName)
                            {
                                case "url":
                                    if (nummer >= urls.Length)
                                        Array.Resize(ref urls, urls.Length + 1);

                                    urls[nummer] = reader.Value.ToString();
                                    MessageBox.Show(urls[nummer]);
                                    break;
                                case "name":
                                    if (nummer >= names.Length)
                                        Array.Resize(ref names, names.Length + 1);

                                    names[nummer] = reader.Value.ToString();
                                    MessageBox.Show(names[nummer]);
                                    break;
                            }
                            nummer++;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

任何帮助将不胜感激。提前谢谢。

PS。如果我在某处不清楚,或者您需要更多信息,那么只需解释一下需要什么。

2 个答案:

答案 0 :(得分:4)

您可以使用LINQ to XML

var xdoc = XDocument.Load(path_to_xml);
var items = from i in xdoc.Root.Elements("item")
            select new {
                Url = (string)i.Element("url"),
                Name = (string)i.Element("name")                
            };

这将给出与您的item元素对应的匿名对象列表。每个对象都具有url和name的强类型属性:

foreach(var item in items)
{
   // use item.Url or item.Name
}

答案 1 :(得分:0)

XDocument doc = XDocument.Load("Xml.xml");

IEnumerable<XElement> items = doc.Descendants("updater").Elements("item")
                              .Select(x => new { Url = x.Element("url").Value, 
                                                 Name = x.Element("name").Value });