2012-07-06 15 views
6

मुझे यकीन है कि यह मूल है और शायद पहले पूछा गया था, लेकिन मैं केवल लिंक से एक्सएमएल का उपयोग शुरू कर रहा हूं।लिंक से एक्सएमएल - एक तत्व खोजें

मेरे पास एक साधारण एक्सएमएल है जिसे मुझे पढ़ने और लिखने की आवश्यकता है।

<Documents> 
... 
    <Document> 
     <GUID>09a1f55f-c248-44cd-9460-c0aab7c017c9-0</GUID> 
     <ArchiveTime>2012-05-15T14:27:58.5270023+02:00</ArchiveTime> 
     <ArchiveTimeUtc>2012-05-15T12:27:58.5270023Z</ArchiveTimeUtc> 
     <IndexDatas> 
     <IndexData> 
      <Name>Name1</Name> 
      <Value>Some value</Value> 
      <DataType>1</DataType> 
      <CreationTime>2012-05-15T14:27:39.6427753+02:00</CreationTime> 
      <CreationTimeUtc>2012-05-15T12:27:39.6427753Z</CreationTimeUtc> 
     </IndexData> 
     <IndexData> 
      <Name>Name2</Name> 
      <Value>Some value</Value> 
      <DataType>3</DataType> 
      <CreationTime>2012-05-15T14:27:39.6427753+02:00</CreationTime> 
      <CreationTimeUtc>2012-05-15T12:27:39.6427753Z</CreationTimeUtc> 
     </IndexData> 
    ... 
</IndexDatas> 
</Document> 
... 
</Documents> 

मेरे पास "दस्तावेज़" नोड है जिसमें "दस्तावेज़" नोड्स का समूह शामिल है।

मेरे पास दस्तावेज़ और "इंडेक्सडाटा" नाम का GUID है। मुझे GUID द्वारा दस्तावेज़ ढूंढने की आवश्यकता है और जांच करें कि क्या उसके नाम पर "इंडेक्सडाटा" है या नहीं। यदि इसमें यह नहीं है तो मुझे इसे जोड़ने की आवश्यकता है।

किसी भी मदद की सराहना की जाएगी, क्योंकि मुझे मुश्किल तत्वों को पढ़ने और खोजने में समस्या है।

वर्तमान में मैं (सी # में) का उपयोग करने की कोशिश कर रहा हूँ:

IEnumerable<XElement> xmlDocuments = from c in XElement 
             .Load(filePath) 
             .Elements("Documents") 
             select c; 

// fetch document 
XElement documentElementToEdit = (from c in xmlDocuments where 
        (string)c.Element("GUID").Value == GUID select c).Single(); 

संपादित

xmlDocuments.Element("Documents").Elements("Document") 

यह कोई परिणाम देता है, यहां तक ​​कि यद्यपि xmlDocuments.Element ("दस्तावेज़") करता है। ऐसा लगता है कि मैं दस्तावेज़ नोड से दस्तावेज़ नोड्स प्राप्त नहीं कर सकता।

उत्तर

7

आप नीचे दिए गए कोड के साथ उन दस्तावेज़ों (इंडेक्स डेटा में संबंधित नाम के बिना दस्तावेज़) पा सकते हैं, इसके बाद आप इंडेक्सडेटा तत्वों के अंत में अपने तत्व जोड़ सकते हैं।

var relatedDocs = doc.Elements("Document") 
    .Where(x=>x.Element("GUID").Value == givenValue) 
    .Where(x=>!x.Element("IndexDatas") 
       .Elements("IndexData") 
       .Any(x=>x.Element("Name") == someValue); 
+0

मुझे लगता है कि 'होना चाहिए doc.Descendants (" दस्तावेज़ ")' –

+0

धन्यवाद, तय की। –

0

यह काम करना चाहिए:

var x = XDocument.Load(filePath); 
// guid in your sample xml is not a valid guid, so I changed it to a random valid one 
var requiredGuid = new Guid("E61D174C-9048-438D-A532-17311F57ED9B"); 
var requiredName = "Name1"; 

var doc = x.Root 
      .Elements("Document") 
      .Where(d => (Guid)d.Element("GUID") == requiredGuid) 
      .FirstOrDefault(); 
if(doc != null) 
{ 
    var data = doc.Element("IndexDatas") 
        .Elements("IndexData") 
        .Where(d => (string)d.Element("Name") == requiredName) 
        .FirstOrDefault(); 
    if(data != null) 
    { 
     // index data found 
    } 
    else 
    { 
     // index data not found 
    } 
} 
else 
{ 
    // document not found 
} 
+0

हैलो। GUID गलत है मुझे पता है, लेकिन सरल स्ट्रिंग के रूप में माना जाना चाहिए। लेकिन मुझे कोई दस्तावेज नहीं मिला है (डॉक्टर शून्य है)! – no9

संबंधित मुद्दे