<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已经存在。我做错了什么?
答案 0 :(得分:4)
根据您展示的内容,首先我必须指出XML代码段不是有效的XML。 data
节点未关闭。
假设这是一个有效的XML文档,它最终将取决于变量XMLDoc
的类型。
如果是XDocument
,则该代码段应该有效,exists
的值为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