Справка C # XML to Listbox - PullRequest
       25

Справка C # XML to Listbox

0 голосов
/ 15 сентября 2011

У меня есть XML, который возвращается из WCF службы отдыха. Ниже приведен пример XML

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
<catalog version="1.1"><dataset id="354" name="Mariano - Ship Drift" description="Global Currents, Static" datatype="currents" rank="5" saropsrank="4" format="netcdf" starttime="1980-01-01T00:00:00" endtime="2019-01-01T00:00:00" extentleft="-180.0000" extentbottom="-90.0000" extentright="180.0000" extenttop="90.0000" source="STATIC" wmslayeridstr="MARIANO_currents" confidence="L" directionfrom="no" image="ne_ndbc.jpg" />
</catalog>
</string>

Мне нужно получить значение из id, имени, описания и т. Д. И поместить его в список или список

WebResponse response = restWebRequest.GetResponse();
Stream responseStream = response.GetResponseStream();

Поток отклика - это поток, содержащий XML.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 сентября 2011
XDocument doc = XDocument.Load(responseStream);

var elem = doc.Descendants().FirstOrDefault(el => el.Name.LocalName == "dataset");
if(elem != null)
{
    var attID = elem.Attribute("id");
    if(attID != null)
        Console.WriteLine(attID.Value);
}

ИЛИ

Вы можете напрямую получить IEnumerable с анонимным типом:

XDocument doc = XDocument.Parse(xml);

var values = doc.Descendants("dataset")
                .Select(el => new { id = el.Attribute("id").Value, 
                                    name = el.Attribute("name").Value 
                                  }
                 );
0 голосов
/ 15 сентября 2011

Вот еще один подход: (Я проверил ваш XML, загрузив его из файла.)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Xml.Serialization;
using System.IO;

namespace delete4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Load();
        }

        void Load()
        {
            var stream = new FileStream("c:\\pj\\data.txt", FileMode.Open);

            XmlRootAttribute xRoot = new XmlRootAttribute();
            xRoot.ElementName = "string";
            xRoot.IsNullable = true;
            xRoot.Namespace = "http://schemas.microsoft.com/2003/10/Serialization/";

            XmlSerializer s = new XmlSerializer(typeof(sstring), xRoot);

            var o = s.Deserialize(stream) as sstring;  // o is your loaded object 

            stream.Close();
        }

        [ XmlRoot("string"), XmlType("string")]
        public class sstring
        {
            public Catalog catalog;
        }

        public class Catalog
        {     
            public Dataset dataset;
        }

        public class Dataset
        {
            [XmlAttribute("name")]
            public string Name;
            [XmlAttribute("id")]
            public string ID;
            [XmlAttribute("description")]
            public string Description;
        }
    }
}
...