簡體   English   中英

檢查XDocument中是否存在該節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM