2009-07-28 13 views
8

मैं एक समस्या मैं एक्सएमएल के लिए Linq में आ रही है चारों ओर मेरे सिर प्राप्त करने के लिए कोशिश कर रहा हूँ करने के लिए Linq के साथ मौजूद है, लगता है जैसे कि यह एक्सएमएल सवाल Linq ब्राउज़ कर जाने के बाद भी बहुत सरल है, लेकिन होना चाहिए यहाँ, मैं काफी यह नहीं मिल सकता है।यह देखना कि एक्सएमएल चाइल्ड तत्व एक्सएमएल

निम्न XML की तर्ज पर लें कुछ:

<users> 
    <user id="1"> 
     <contactDetails> 
      <phone number="555 555 555" /> 
     </contactDetails> 
    </user> 
    <user id="2"> 
     <contactDetails /> 
    </user> 
</users> 

मैं अब यदि आईडी 2 के साथ उपयोगकर्ता एक फोन नंबर की जांच करना चाहते हैं।

किसी को, एक समाधान का सुझाव कर सकते हैं जैसा कि मैंने कहा, लगता है जैसे कि यह आसान होना चाहिए ...

चीयर्स, ओला

उत्तर

13

यहाँ एक प्रश्न तरीका है

if (!xe.Root.Element("Date").IsEmpty) 
{ 
    pd.datefield = System.Convert.ToString(xe.Root.Element("Date").Value); 
} 

शून्य डेटा के साथ काम नहीं करता है डेटाबेस इसे खाली डेटा

कि के लिए के साथ टैग का निर्माण नहीं करता के रूप में आप पाश throug करना होगा ज बच्चे तत्वों

3

संभवतः है यह करने के लिए एक बेहतर और बरसाती कोट रास्ता (मैं नहीं कर रहा हूँ अभी तक बहुत Linq करने वाली एक्सएमएल) से परिचित है, लेकिन इस कोड का टुकड़ा काम करना चाहिए:

XElement yourDoc = XElement.Load("your file name.xml"); 

foreach (XElement user in yourDoc.Descendants("user")) 
{ 
    foreach(XElement contact in user.Descendants("contactDetails")) 
    { 
     var phone = contact.Descendants("phone"); 

     bool hasPhone = (phone.Count() > 0); 
    } 
} 

यह मूल रूप से अपने XML में सभी "उपयोगकर्ता" नोड पर विश्लेषण करता है, और तब सभी "contactDetails" उपयोगकर्ता नोड के अंदर नोड्स, और फिर वहाँ है कि अगर किसी भी "फोन" देखने के लिए जाँच कि नीचे subnodes।

.Descendants() कॉल बैक XElement नोड्स की एक सूची प्रदान करेगा, और अगर वहाँ प्रकार आप के बारे में, उस सूची पर .Count() पूछताछ में से कोई भी कर रहे हैं (एक IEnumerable<T>) 0 वापस आ जाएगी - कि क्या मेरी कोड के लिए जाँच कर रहा है है। एक मूल्य के होने से पहले XML करने के लिए आप इस त्वरित जांच कर सकते हैं

XElement yourDoc = XElement.Load("your file name.xml"); 

bool hasPhone = (
    from user in yourDoc.Descendants("user") 
    where (int)user.Attribute("id") == 2 
    select user.Descendants("phone").Any() 
    ).Single(); 
संबंधित मुद्दे