仅当存在时,XmlDocument readAttribute值

时间:2014-02-28 06:51:14

标签: c# xmldocument xmlreader

我有一个xml如下

<xml>
<action OptAttr ="true">somevalue1</action>
<action>somevalue2</action>
<action OptAttr ="true">somevalue3</action>
</xml>

OptAttribute是一个可选属性,可能不存在于所有节点中。 我想要检索OptAttr(如果存在)和somevalue1,2等。

使用xmldocument / xmlreader的最佳方法是什么?

感谢, 阿达什讷

1 个答案:

答案 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();