[英]Check if the node exist in XDocument
我有这个xml:
<Rejectedparameters>
<parameter>
<name>CO</name>
<value>5.34</value>
</parameter>
<parameter>
<name>CO2</name>
<value>10.1</value>
</parameter>
<parameter>
<name>HC</name>
<value>473</value>
</parameter>
<parameter>
<name>O2</name>
<value>2</value>
</parameter>
</Rejectedparameters>
我需要检查例如是否存在节点-像这样:
int Gvalue = (from x in document.Elements("Rejectedparameters").Elements("parameter")
from p in x.Elements("Name")
where x.Element("CO").Value.ToString() != string.Empty
select x).Count();
但是Gvalue是0-为什么? 如您所见, CO
存在于XML中。
首先,每个parameter
元素只有一个名称,因此只需使用Element
。
接下来,使用name
作为您要查找的元素,而不是Name
。
最后,您要查找的是CO
的值 ,而不是名为CO
的元素 。 所以你会有类似的东西:
var query = doc
.Root
.Elements("parameter")
.Where(parameter => (string) parameter.Element("name") == "CO" &&
!string.IsNullOrEmpty((string) parameter.Element("value"));
var count = query.Count(); // It's not clear why this was Gvalue in your original code
我猜到您正在尝试检查空字符串...您可能不需要过滤器的第二部分。 我假设您不仅想要获得计数-您实际上也想使用元素。
一种替代方法是首先使用查询转换所有参数:
var parameters = doc.Root.Elements("parameter").Select(p =>
new { Name = (string) p.Element("name"), Value = (string) p.Element("value") });
// Just as an example...
var co = parameters.SingleOrDefault(p => p.Name == "CO");
首先, CO
不是元素。 这是价值。 并且您应该更改查询;
var gValue = document.Descendants("name").Count(x => x.Value == "CO");
Output : 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.