检查名称属性中是否存在值

本文关键字:是否 存在 属性 检查 | 更新日期: 2023-09-27 18:19:40

<root>
  <data name="ID1"></data>
  <data name="ID2"></data>
</root>
XDocument xmlDoc = XDocument.Load(xmlFile);
bool exists = (from elem in xmlDoc.Descendants("root")
               where elem.Element("data").Attribute("name").Value == "ID1"
               select elem).Any();

它看不到 ID1 已存在。 我做错了什么?

检查名称属性中是否存在值

根据您展示的内容,首先我必须指出 XML 片段不是有效的 XML。 data节点未关闭。

假设这是一个有效的 XML 文档,它最终将取决于变量 XMLDoc 的类型。

如果它是一个XDocument,那么该代码片段应该可以工作,并且exists的值将是true。 该文档包含一个名为root的后代,它可以开展业务。

另一方面,如果它是一个XElement,那么该代码片段应该失败,并且exists的值将falseXMLDoc变量已经引用了root元素,并且显然没有任何后代称为root

但是,您应该重写查询,也许更像这样:

// please follow .NET naming conventions and use lowercase for local variables
XDocument xmlDoc = XDocument.Load(xmlFile);
// iterate over the `data` elements, not the `root` elements
bool exists = (from data in xmlDoc.Element("root").Elements("data")
               where (string)data.Attribute("name") == "ID1"
               select data).Any();
// using the cast is a personal style choice
// using `XAttribute.Value` is fine too in this case