C# 检查名称属性中是否存在值 XDocument xmlDoc=XDocument.Load(xmlFile); bool exists=(来自xmlDoc.substands(“根”)中的元素) 其中elem.Element(“data”).Attribute(“name”).Value==“ID1” 选择elem).Any();

C# 检查名称属性中是否存在值 XDocument xmlDoc=XDocument.Load(xmlFile); bool exists=(来自xmlDoc.substands(“根”)中的元素) 其中elem.Element(“data”).Attribute(“name”).Value==“ID1” 选择elem).Any();,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,它没有看到ID1已经存在。我做错了什么?根据您所展示的内容,首先我必须指出XML片段不是有效的XML。数据节点未关闭 假设这是一个有效的XML文档,它最终将取决于变量XMLDoc的类型 如果它是XDocument,那么该代码段应该可以工作,的值应该是true。该文档包含一个名为root的子体,它可以处理自己的事务 另一方面,如果它是一个XElement,那么该代码段应该失败,exists的值将是false。XMLDoc变量将引用root元素,显然没有任何称为root的子元素 但是,您应该重写查询

它没有看到ID1已经存在。我做错了什么?

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

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

如果它是
XDocument
,那么该代码段应该可以工作,
的值应该是
true
。该文档包含一个名为
root
的子体,它可以处理自己的事务

另一方面,如果它是一个
XElement
,那么该代码段应该失败,
exists
的值将是
false
XMLDoc
变量将引用
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

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

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

如果它是
XDocument
,那么该代码段应该可以工作,
的值应该是
true
。该文档包含一个名为
root
的子体,它可以处理自己的事务

另一方面,如果它是一个
XElement
,那么该代码段应该失败,
exists
的值将是
false
XMLDoc
变量将引用
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

XMLDoc
的类型是什么?它是
XDocument
还是
XElement
?这是您真正的XML吗?它不是有效的XML(
数据
节点未关闭)。
XMLDoc
的类型是什么?它是
XDocument
还是
XElement
?这是您真正的XML吗?它不是有效的XML(
数据
节点未关闭)。因此您的工作正常。为什么我的不行?顺便说一句,谢谢你的洞察力!我认为杀死你的代码的是你在迭代
元素,而不是
数据
元素,这就是我建议重写的原因。您的代码将只检查第一个
数据
元素,而忽略其余元素。您的XML可能有不同的顺序,这可以解释它失败的原因。为什么我的不行?顺便说一句,谢谢你的洞察力!我认为杀死你的代码的是你在迭代
元素,而不是
数据
元素,这就是我建议重写的原因。您的代码将只检查第一个
数据
元素,而忽略其余元素。您的XML可能具有不同的顺序,这可以解释它失败的原因。