从URL读取XML并将其分配给列表

时间:2012-07-16 17:54:12

标签: c# xml

http://api.serviceu.com/rest/events/occurrences?orgkey=613dc2ce-0b32-4926-8e7e-33ee279be1cb

我有上面的xml url,它有n次出现。我需要读取所有出现并将其加载到列表项中。如何使用xml阅读器。

 XmlTextReader reader = new XmlTextReader(strURL);

 while (reader.Read())
 {

 }

例如,我如何读取每个发生的CategoryList,ContactEmail,Description。

感谢。

4 个答案:

答案 0 :(得分:2)

您可以使用XmlReader

using(XmlReader reader = XmlReader.Create("..."))
{
    while (reader.Read())
    {
        if (reader.IsStartElement())
        {
            switch (reader.Name)
            {
                case "CategoryList":
                    var cat = reader.ReadElementContentAsString();
                    break;
                case "ContactEmail":
                    var email = reader.ReadElementContentAsString();
                    break;
            }
        }
    }
}

XmlDocumentXPath

XmlDocument document = new XmlDocument();
document.Load("...");
foreach (XmlNode node in document.SelectNodes("//CategoryList"))
{
    var cat = node.InnerText;
}

foreach (XmlNode node in document.SelectNodes("//ContactEmail"))
{
    var email = node.InnerText;
}

或Linq-to-Xml为 L.B

答案 1 :(得分:1)

Linq2Xml可以让生活更轻松。

XDocument xDoc = XDocument.Load("http://api.serviceu.com/rest/events/occurrences?orgkey=613dc2ce-0b32-4926-8e7e-33ee279be1cb");
var list = xDoc.Descendants("Occurrence")
            .Select(o => new Item
            {
                Category = (string)o.Element("CategoryList"),
                EMail = (string)o.Element("ContactEmail"),
                Description = (string)o.Element("Description"),
            })
            .ToList();


public class Item
{
    public string Category;
    public string EMail;
    public string Description;
}

答案 2 :(得分:0)

XmlTextReader reader = new XmlTextReader(strURL);

    while (reader.Read())
    {
        switch(reader.Name)
         {
            case "ContactEmail":
                  //reader.ReadElementContentAsString();
              break;
             //...
         }
    }

我会为XML文档中的每个集合创建一个支持类。

答案 3 :(得分:0)

[DataContract(Name = "Occurrence", Namespace = "")]
class Occurrence
{
    [DataMember]
    public string CategoryList { get; set; }
    [DataMember]
    public string ContactEmail { get; set; }
    [DataMember]
    public string Description { get; set; }
}
var ser = new DataContractSerializer(typeof(List<Occurrence>), "Occurrences", "");

List<Occurrence> objects = null;
using (var reader = XmlReader.Create(strURL))
{
    objects = (List<Occurrence>) ser.ReadObject(reader);
}