【发布时间】:2016-05-26 05:23:08
【问题描述】:
有什么方法可以更简单地将 xml 转换为键值对,而无需遍历每个节点和元素
我的 XML 结构是这样的
<root>
<StandardValues>
<ButtonYES alias="customname value">Ja</ButtonYES>
<ButtonNO>Nei</ButtonNO>
</StandardValues>
<Page1>
<Key_Head>2011 Applications</Key_Head>
<Key_Title>Title from 2011</Key_Title>
<Key_Param1>Parameter value</Key_Param1>
</Page1>
<Page2>
<Page_Head>2011 Applications</Page_Head>
<page_Title>Title from 2011</page_Title>
<CustomParam1>Parameter value</CustomParam1>
</Page2>
</root>
显然ElementNode名称和子xml节点名称本质上是不统一的,可以是任意名称[xml标签[也可以是任意数量的子项
XML 转换的想法是为最终对象为 Dic 的应用程序启用翻译
从 XML 转换为键值对列表的最佳方法是什么
我试过了
var maping = doc.Descendants("Page1")
.Elements()
.ToDictionary(d => (string)d.Name.LocalName,
d => (string)d.Value);
但它只返回一组页面1 我们可以为所有根的孩子制作它吗
使用这种方法,我可以将其读取到具有 3 个属性的类中
var maping = doc.Descendants("Page1")
.Elements().Select(d => new
{
Attribute = (string)d.Name.LocalName,
Value = d.Value, // equal to id you are searching for
Key = (d.Attribute("alias") != null) ? d.Attribute("alias").Value : ""
}).ToList();
foreach (var s in maping)
{
string ss = string.Format("{0} - {1} && {2}", s.Key, s.Value, s.Attribute);
}
【问题讨论】:
-
你试过 LINQ to XML 吗?
-
我认为如果它的 LINQtoXML 我们应该根据 XML 结构保留多个类,我们不能将其作为键值对,在这种情况下,我必须使用属性创建 3 个类 SatndardValues Page1 和 Page2类似于子节点。
-
您是否正在寻找这个特殊的
xml或任何(通用)xml? -
可以是通用的 xml 。可以包含 N 个节点,每个节点可以包含 X 个元素
-
一个键值对是什么?什么是关键,什么是价值?如果是元素名称和值,你建议如何处理重复和嵌套元素?
标签: c# xml deserialization