사전

2012-12-19 3 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

XML 파일의 일반 텍스트 암호 ... –

답변

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 (filename); – Vlad

+0

다음 오류가 발생했습니다. 'System.Collections.Generic.IEnumerable '에 'ToDictionary'에 대한 정의가없고 확장 메서드 'ToDictionary'에 'System .Collections.Generic.IEnumerable '찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) –

+6

@RamzyAbourafeh LINQ 확장 메서드를 사용할 수 있도록'using System.Linq;'를 추가하십시오. . – ken2k

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

Remeber은 다음을 포함합니다 :

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

이것은 오래된 질문이지만 누군가가 'Typed' xml (예 : SharedPreference 안드로이드 앱 파일)을 발견하면 다음과 같이 처리 할 수 ​​있습니다. Instagram에서 가져온 xml 샘플입니다. 앱.

<?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> 

value 속성의 불일치에 유의하십시오. 일부 필드 (예 : 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);