2009-03-03 15 views
15

मैं डब्लूसीएफ सेवा कॉल के परिणामों के लिए सिल्वरलाइट डेटाग्रिड बांधने की कोशिश कर रहा हूं। मैं ग्रिड में प्रदर्शित डेटा नहीं देख रहा था, इसलिए जब मैं डीबगर के माध्यम से भाग गया, तो मैंने देखा कि XDocument.Descendants() किसी भी तत्व को वापस नहीं कर रहा था जब भी मैं एक वैध तत्व नाम में गुजर रहा था। यहाँXDocument.Descendants() किसी भी तत्व को वापस नहीं कर रहे हैं

<ArrayOfEmployee xmlns="http://schemas.datacontract.org/2004/07/Employees.Entities" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Employee> 
    <BirthDate>1953-09-02T00:00:00</BirthDate> 
    <EmployeeNumber>10001</EmployeeNumber> 
    <FirstName>Georgi</FirstName> 
    <Gender>M</Gender> 
    <HireDate>1986-06-26T00:00:00</HireDate> 
    <LastName>Facello</LastName> 
    </Employee> 
    <Employee> 
    <BirthDate>1964-06-02T00:00:00</BirthDate> 
    <EmployeeNumber>10002</EmployeeNumber> 
    <FirstName>Bezalel</FirstName> 
    <Gender>F</Gender> 
    <HireDate>1985-11-21T00:00:00</HireDate> 
    <LastName>Simmel</LastName> 
    </Employee> 
</ArrayOfEmployee> 

और विधि मैं गुमनाम वस्तुओं का संग्रह में परिणाम लोड करने, एक्सएमएल को LINQ का उपयोग करें, और फिर ग्रिड से संग्रह बाँध का उपयोग कर रहा है: यहाँ एक्सएमएल कि सेवा से वापस पारित हो जाता है है ।

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs args) 
{ 
    if (args.Error != null) return; 
    var xml = XDocument.Parse(args.Result); 
    var employees = from e in xml.Descendants("Employee") 
        select new 
        { 
         EmployeeNumber = e.Element("EmployeeNumber").Value, 
         FirstName = e.Element("FirstName").Value, 
         LastName = e.Element("LastName").Value, 
         Birthday = e.Element("BirthDate").Value 
        }; 
    DataGrid.SelectedIndex = -1; 
    DataGrid.ItemsSource = employees; 
} 

कोई विचार क्यों xml.Descendants("Employee") कुछ भी वापस नहीं करता है?

धन्यवाद!

उत्तर

33

descendents को पारित स्ट्रिंग पैरामीटर वास्तव में पूरी तरह से XName ऑब्जेक्ट में परिवर्तित हो गया है। एक एक्सनाम एक पूर्णतः योग्य तत्व नाम का प्रतिनिधित्व करता है।

दस्तावेज़ नामस्थान "i" परिभाषित करता है, इसलिए मुझे विश्वास है कि आपको कर्मचारी तक पहुंचने के लिए पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता है। अर्थात। मैं: कर्मचारी, जहां उपसर्ग "मैं:।

XName qualifiedName = XName.Get("Employee", "http://www.w3.org/2001/XMLSchema-instance"); 

var employees = from e in xml.Descendants(qualifiedName) 

... 
+1

आप सही थे, मुझे नामस्थान शामिल करने की आवश्यकता थी। मदद के लिए धन्यवाद! –

0

आप पेरेंट तत्व से नाम स्थान शामिल नहीं कर रहे:

XNameSpace ns = "http://schemas.datacontract.org/2004/07/Employees.Entities"; 
foreach (XElement element in xdoc.Descendants(ns + "Employee") 
{ 
    ... 
} 
वास्तव में पूर्ण नाम स्थान स्ट्रिंग के लिए हल करता है

आप की तरह कुछ करने की कोशिश की है