2012-12-19 26 views
18

करने के लिए XML परिवर्तित करने के लिए मैं निम्नलिखित के रूप में xml है:कैसे शब्दकोश

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <data name="LogIn">Log In</data> 
    <data name="Password">Password</data> 
</root> 

मैं सफलता कि Linq के बिना, किसी भी एक मेरी मदद कर सकते Linq के लिए निम्न कोड में परिवर्तित करने के लिए:

using (XmlReader reader = XmlReader.Create(_xml)) 
{ 
    while (reader.Read()) 
    { 
     if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "data") 
     { 
      reader.MoveToAttribute("name"); 
      string key = reader.Value; 
      reader.MoveToContent(); 
      string value = reader.ReadElementContentAsString(); 
      _dictionary.Add(key, value); 
     } 
    } 
    reader.Close(); 
} 
+6

सादा पाठ पासवर्ड ... –

उत्तर

20
var xdoc = XDocument.Load(path_to_xml); 
_dictionary = xdoc.Descendants("data") 
        .ToDictionary(d => (string)d.Attribute("name"), 
           d => (string)d); 
+1

बस स्पष्ट XDocument xdoc = XDocument.Load (फ़ाइल का नाम) के लिए; – Vlad

+0

मुझे निम्न त्रुटि मिली: 'System.Collections.Generic.IEnumerable ' में 'ToDictionary' की परिभाषा नहीं है और कोई एक्सटेंशन विधि 'ToDictionary' प्रकार के पहले तर्क को स्वीकार नहीं करती है 'सिस्टम .Collections.Generic.IEnumerable 'पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) –

+6

@RamzyAbourafeh' System.Linq का उपयोग करके 'जोड़ें; ताकि आप LINQ एक्सटेंशन विधियों का उपयोग कर सकें । – ken2k

0
XDocument xdoc = XDocument.Load("test.XML"); 
var query = xdoc.Descendants("root") 
       .Elements() 
       .ToDictionary(r => r.Attribute("name").Value, 
          r => r.Value); 

याद रखें शामिल करने के लिए:

using System.Linq; 
using System.Xml.Linq; 
0

यह एक पुराना सवाल है, लेकिन अगर कोई 'Typed' xml (उदाहरण के लिए एंड्रॉइड ऐप की SharedPreference फ़ाइल से) में आता है, तो आप इसे नीचे संभाल सकते हैं: यहां Instagram से लिया गया एक एक्सएमएल का नमूना है एप्लिकेशन।

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<boolean name="pinnable_stickers" value="false" /> 
<string name="phone_number">+254711339900</string> 
<int name="score" value="0" /> 
<string name="subscription_list">[]</string> 
<long name="last_address_book_updated_timestamp" value="1499326818875" /> 
//...other properties 
</map> 

मूल्य संपत्ति में असंगतता पर ध्यान दें। कुछ फ़ील्ड (उदाहरण के प्रकार string) इसे स्पष्ट रूप से परिभाषित नहीं किया गया है।

var elements = XElement.Load(filePath) 
.Elements() 
.ToList(); 
var dict = new Dictionary<string, string>();  
var _dict = elements.ToDictionary(key => key.Attribute("name").Value, 
         val => val.Attribute("value") != null ? 
         val.Attribute("value").Value : val.Value); 
एक XML फ़ाइल में
संबंधित मुद्दे