从XML文档中获取特定的数据

本文关键字:数据 获取 XML 文档 | 更新日期: 2023-09-27 18:10:57

我有一个这样的xml文档:

<level1>
 <level2>
  <level3>
   <attribute1>...</attribute1>
   <attribute2>false</attribute2>
   <attribute3>...</attribute3>
  </level3>
  <level3>
   <attribute1>...</attribute1>
   <attribute2>true</attribute2>
   <attribute3>...</attribute3>
  </level3>
</level2>
<level2>
 <level3>
   <attribute1>...</attribute1>
   <attribute2>false</attribute2>
...
...
...

我正在使用c#,我想通过所有的"level3",对于每个"level3",我想读取attribute2,如果它说"真",我想打印相应的attribute3(可以是"level3"没有这些属性)。

我将xml保存在XmlDocument中。然后我将所有"level3"节点保持如下:

XmlNodeList xnList = document.SelectNodes(String.Format("/level1/level2/level3"));

(文档是XmlDocument)。

但是从现在开始,我不知道该怎么继续。我试着通过xnList与for..每个都有,但是没有一个适合我。

我该怎么做?

Thanks to lot

从XML文档中获取特定的数据

我将使用LINQ to XML:

var results = from level3 in doc.Descendants("level3")
              where (bool) level3.Element("attribute2")
              select level3.Element("attribute3").Value;
foreach (string result in results)
{
    Console.WriteLine(result);
}

LINQ to XML使各种事情XmlDocument API简单得多。当然,缺点是它需要。net 3.5…

(顺便说一下,命名元素 attributeN有点令人困惑…人们会期望attribute引用一个实际的XML属性…)

您可以使用LINQ转换XML,阅读这篇文章是一个良好的开端。

可以使用XPath查询。这将为您提供一个XmlNodeList,其中包含符合您要求的所有<attribute3>元素:

var list = document.SelectNodes("//level3[attribute2 = 'true']/attribute3");
foreach(XmlNode node in list)
{
    Console.WriteLine(node.InnerText);
}

可以将上面的xpath查询分成三个部分:

  1. " //level3 "查询所有命名为<level3>的后代元素。
  2. " [attribute2 = 'true'] "过滤(1)的结果,只保留子元素<attribute2>包含文本true的元素。
  3. " /attribute3 "取(2)结果中每个元素的<attribute3>子节点。