Penguraian XML di Windows Phone 8 C#

saya ingin mengurai file xml dari url berikut:"http://restservice.com/RestServiceImpl.svc/ghhf/cvr"

saya bisa mendapatkan XDocument dengan menggunakan kode berikut:

private void Search(object sender, RoutedEventArgs e)
{
    string url = "http://restservice.schoolpundit.com/RestServiceImpl.svc/search_name/cvr";
    WebClient twitter = new WebClient();
    twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
    twitter.DownloadStringAsync(new Uri(url));
}

void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error != null)
        return;
    XDocument doc = XDocument .Parse(e.Result);

    var list = from child in  doc.Descendants("Institutions_search_name")
               select new listrows {
                  inst_name=doc.Element("Inst_name").Value;
               };

     Listbox.ItemSource=list;
} 

tetapi tidak menampilkan Inst_name apa pun, sebenarnya tidak masuk ke dokumen. Descendants("Institutions_search_name") juga tidak menunjukkan pengecualian apa pun. Jika saya melakukan kesalahan, perbaiki saya.


person madan V    schedule 08.05.2013    source sumber
comment
Kode Anda tidak menggunakan list di mana pun... kode tersebut seharusnya tetap mengeksekusi metode doc.Descendants, namun Anda tidak melakukan apa pun dengan hasilnya. Apakah Anda memeriksa di debugger bahwa penguraian itu sendiri telah berhasil? Perhatikan bahwa kode Anda saat ini bahkan tidak dapat dikompilasi saat Anda mencoba menggunakan properti bernama value padahal properti sebenarnya disebut Value. Tidak ada gunanya memberi kami sesuatu yang mirip dengan kode Anda - Anda harus memberi kami kode aktual yang menunjukkan masalahnya.   -  person Jon Skeet    schedule 08.05.2013
comment
saya ingin mengikat daftar itu ke listBox. saya mengedit pertanyaan, periksa sekarang dan beri tahu saya cara mengurai xml.   -  person madan V    schedule 08.05.2013
comment
Anda masih belum mengatakan apakah Anda sudah memeriksa di debugger bahwa panggilan XDocument.Parse berhasil. (Dan kode dalam pertanyaan Anda sangat buruk memformatnya. Harap berusaha sedikit agar dapat dibaca, dengan lekukan yang konsisten dan tanpa banyak spasi vertikal tanpa alasan.)   -  person Jon Skeet    schedule 08.05.2013
comment
Omong-omong, kode yang Anda sajikan masih tidak dapat dikompilasi karena ; setelah Value. Anda seharusnya benar-benar memberikan contoh singkat namun lengkap yang dapat Anda posting verbatim sebelum mengajukan pertanyaan.   -  person Jon Skeet    schedule 08.05.2013


Jawaban (1)


Saya rasa Anda hanya melewatkan namespacenya - meskipun Anda juga menelepon doc.Element, bukan child.Element. Jika Anda melihat XML, Anda akan melihat ini di elemen root:

 xmlns="http://schemas.datacontract.org/2004/07/RestService"

Itu berarti bahwa setiap elemen yang tidak memiliki namespace yang ditentukan secara eksplisit ada di namespace tersebut.

Untungnya LINQ to XML membuat ini sangat mudah untuk ditangani:

XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = from child in doc.Descendants(ns + "Institutions_search_name")
           select new listrows {
               inst_name=child.Element(ns + "Inst_name").Value
           };

Meskipun saya mungkin akan melakukannya tanpa ekspresi kueri:

XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = doc.Descendants(ns + "Institutions_search_name")
              .Select(x => new listrows { 
                         inst_name = child.Element(ns + "Inst_name").Value
                      });

Faktanya, mengingat Anda hanya memilih satu string, saya akan membuang bit listrows:

XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = doc.Descendants(ns + "Institutions_search_name")
              .Select(x => child.Element(ns + "Inst_name").Value);

Perhatikan juga bahwa listrows dan inst_name melanggar konvensi penamaan .NET - ada baiknya mencoba konsisten dengan konvensi tersebut untuk membuat kode Anda lebih mudah dibaca semua orang.

person Jon Skeet    schedule 08.05.2013
comment
saya mendapatkan Pengecualian NullReference di inst_name=child.Element(ns + Inst_name).Value tetapi ada teks di inst_name - person madan V; 08.05.2013