我有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();
}
var xdoc = XDocument.Load(path_to_xml);
_dictionary = xdoc.Descendants("data")
.ToDictionary(d => (string)d.Attribute("name"),
d => (string)d);
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;
这是一个老问题,但万一有人遇到一个'Typed'
的XML(例如,从SharedPreference
Android应用程序的文件),你可以按照以下处理:这是我从一个带着这样的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>
请注意,在值属性不一致。 某些字段(如类型的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);