我有一个xml如下
<xml>
<action OptAttr ="true">somevalue1</action>
<action>somevalue2</action>
<action OptAttr ="true">somevalue3</action>
</xml>
OptAttribute是一个可选属性,可能不存在于所有节点中。 我想要检索OptAttr(如果存在)和somevalue1,2等。
使用xmldocument / xmlreader的最佳方法是什么?
感谢, 阿达什讷
答案 0 :(得分:1)
如果您可以使用Linq to Xml,那么我建议您使用它
var xdoc = XDocument.Load(path_to_xml);
var actions = from a in xdoc.Root.Elements("action")
select new {
Value = (string)a,
OptAttr = (bool?)a.Attribute("OptAttr")
};
此查询将操作解析为以下匿名对象:
[
{ Value: "somevalue1", OptAttr: true },
{ Value: "somevalue2", OptAttr: null },
{ Value: "somevalue3", OptAttr: true }
]
如果要对OptAttr使用默认值(例如false)而不是nullable boolean,那么可以使用null-coalescing operator
来提供它OptAttr = (bool?)a.Attribute("OptAttr") ?? false
更新:将操作解析为ObjectA列表:
List<ObjectA> actions = (from a in xdoc.Root.Elements("action")
select new ObjectA {
Value = (string)a,
OptAttr = (bool?)a.Attribute("OptAttr")
}).ToList();
或lambda语法(我不喜欢将它与查询语法混合)
var actions = xdoc.Root.Elements("action")
.Select(a => new ObjectA {
Value = (string)a,
OptAttr = (bool?)a.Attribute("OptAttr")
}).ToList();