Xmlelement条件使用c#获取另一个元素的值

Xmlelement condition to get value of another element using c#

我有一份包含多条记录的 xml文档。 例如:

<value>
<id>aaaaa</id>
<condition>true</condition>
</value>

<value>
<id>bbbb</id>
<condition>false</condition>
</value>

<value>
<id>ccccc</id>
<condition>true</condition>
</value>

现在使用 c# 和 xml linq
我需要检查条件元素值 如果它是真的那么我需要将它的 id 值传递给 string

我使用的代码:

XmlDocument doc = new XmlDocument();
doc.Load(@"D:\Downloads\file.xml");

XmlElement xml= doc.DocumentElement;
XmlNodeList cond= xml.SelectNodes("/value/condition");
XmlNodeList id= xml.SelectNodes("/value/id");

foreach (XmlElement node in cond)
{
    var value = node.InnerText;

    if (value == "true")
    {
        var id_values = id.InnerText;
        Console.WriteLine(id_values);
        Console.ReadKey();
    }
}

在此代码中,我无法获取条件的 id 值,该值为真。它 returns 所有 ID,但我只需要不符合真实条件的 ID 值。

您需要 select“值”节点,然后在您的循环中进行分析。例如让你开始:

var s = @"<?xml version=""1.0"" encoding=""utf - 8""?>
<values>
<value>
<id>aaaaa</id>
<condition>true</condition>
</value>

<value>
<id>bbbb</id>
<condition>false</condition>
</value>

<value>
<id>ccccc</id>
<condition>true</condition>
</value>
</values>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(s);

var nodes = doc.SelectNodes("/values/value");
foreach (XmlElement node in nodes)
{
    if (node.SelectSingleNode("condition").InnerText == "true")
    {
        Console.WriteLine(node.SelectSingleNode("id").InnerText); // prints "aaaaa" and "ccccc"
    }
}

请查看 linq to xml 的基础知识。它有许多易于导航的 API。

XElement.Load("file")
   .Elements(XName.Get("value"))
   .Where(x => x.Element("condition").Value.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase))
   .Select(x => x.Element("id").Value);