gpt4 book ai didi

c# - 检查节点是否存在于 XDocument 中

转载 作者:太空宇宙 更新时间:2023-11-03 17:38:10 24 4
gpt4 key购买 nike

我有这个 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");

关于c# - 检查节点是否存在于 XDocument 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47969291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com