如何检查XmlAttributeCollection中是否存在属性?

22

我正在MSDN上检查有关检查XmlNode属性是否存在的方法的XmlNode.Attributes topic。好吧,没有关于如何检查项目的示例。

我有类似这样的东西:

  //some code here...

  foreach (XmlNode node in n.SelectNodes("Cities/City"))
  {
        //is there some method to check an attribute like
        bool isCapital = node.Attributes.Exist("IsCapital");

        //some code here...
  }

那么,检查每个节点中是否存在属性的最佳方法是什么? 使用node.Attribute["IsCapital"]!=null可以吗?

1个回答

43

只需使用索引器——如果该属性不存在,则索引器会返回null

bool isCapital = nodes.Attributes["IsCapital"] != null;

这在XmlAttributeCollection.ItemOfProperty (String)中有记录。

返回指定名称的XmlAttribute。如果该属性不存在,则此属性返回null


似乎不适用于布尔属性,因为它们可以存在但没有指定值,例如 <myTag text="something" isChecked /> - Ivan
1
@Ivan - 你似乎在思考HTML,而不是XML。XML不允许没有值的属性。 - Oded
但是,@Oded,XHTML 呢?它不是旨在允许布尔值属性没有值的同时保持有效的 XML 吗?我实际上想在自己的 XML 中使用它来进行“去膜”处理。 - Ivan
@Ivan - 不行。XHTML 也必须是有效的 XML,这就是它存在的全部意义。它不允许布尔属性。 - Oded
对于实际使用,请记住 XmlNode.Attributes 属性可能为空。nodes?.Attributes["IsCapital"] != null - Arin Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接