如何将 XML 转换为字典
Posted
技术标签:
【中文标题】如何将 XML 转换为字典【英文标题】:How to convert XML to Dictionary 【发布时间】:2012-12-06 19:22:55 【问题描述】:我的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();
【问题讨论】:
XML 文件中的纯文本密码... 【参考方案1】:var xdoc = XDocument.Load(path_to_xml);
_dictionary = xdoc.Descendants("data")
.ToDictionary(d => (string)d.Attribute("name"),
d => (string)d);
【讨论】:
我收到以下错误:“System.Collections.Generic.IEnumerableusing System.Linq;
以便您可以使用 LINQ 扩展方法。
@lazyberezovsky,Descendants("data")
是做什么的?
太棒了! @Habib,也许 xdoc.Element("Root").Elements() 更适合您?但在这里也一样。
@lazyberezovsky,+1 并感谢您的链接,感谢 efkah【参考方案2】:
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;
【讨论】:
【参考方案3】:这是一个老问题,但如果有人遇到'Typed'
xml(例如来自 android 应用程序的 SharedPreference
文件),您可以按如下方式处理它:这是我的此类 xml 的示例取自 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>
注意 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);
【讨论】:
以上是关于如何将 XML 转换为字典的主要内容,如果未能解决你的问题,请参考以下文章
Python面试必考重点之数据存储第二关——XML文档和字典的互转
Python每日一练——数据存储第二关:XML文档和字典的互转