C# 选择XML节点?

C# 选择XML节点?,c#,.net,xml,C#,.net,Xml,我有一个很大的XML文件,其中包含很多文件节点: <File> <Component>Main</Component> <Path>C:\Logs\Main</Path> <FileName>logfile1.log</FileName> </File> 主要 C:\Logs\Main logfile1.log 在我的C#程序中,我想选择一个具有特定文件名的节点,例如在上面的示例中,

我有一个很大的XML文件,其中包含很多文件节点:

<File>
  <Component>Main</Component>
  <Path>C:\Logs\Main</Path>
  <FileName>logfile1.log</FileName>
</File>

主要
C:\Logs\Main
logfile1.log
在我的C#程序中,我想选择一个具有特定文件名的节点,例如在上面的示例中,我想选择文件名为logfile1.log的文件节点。有没有办法在我的C#中做到这一点,或者我需要将文件名作为每个文件节点的属性,例如:

<File name="logfile1.log">...</File>
。。。
有人能给我建议一下这里的最佳做法吗?谢谢你的帮助

var doc = new XmlDocument();
doc.LoadXml(xml); // or Load(path)
var node = doc.SelectSingleNode("//File/FileName[.='logfile1.log']");
(见附件)

(见附件)


XPath查询将是一个很好的选择。可以使用xpath搜索元素名或属性名

比如:

var doc = new XPathDocument(path);
var xpath = doc.CreateNavigator();

//with element
var node = xpath.SelectSingleNode("//File[FileName='logfile1.log']");

//or with attribute
var node = xpath.SelectSingleNode("//File[@name='logfile1.log']");
或者,如果可能有多个匹配项,则可以使用Select查找多个匹配项,然后迭代它们

var node = xpath.Select("//File...");

XPath查询将是一个很好的选择。可以使用xpath搜索元素名或属性名

比如:

var doc = new XPathDocument(path);
var xpath = doc.CreateNavigator();

//with element
var node = xpath.SelectSingleNode("//File[FileName='logfile1.log']");

//or with attribute
var node = xpath.SelectSingleNode("//File[@name='logfile1.log']");
或者,如果可能有多个匹配项,则可以使用Select查找多个匹配项,然后迭代它们

var node = xpath.Select("//File...");
使用查询语法

var xml = XDocument.Load("input.xml");
var node = (from file in xml.Descendants("File")
           where (string)file.Element("FileName") == "logfile1.log"
           select file).Single();
显然,强制查询的调用(在本例中为Single())应该调出,以适合您自己的应用程序。

使用查询语法

var xml = XDocument.Load("input.xml");
var node = (from file in xml.Descendants("File")
           where (string)file.Element("FileName") == "logfile1.log"
           select file).Single();
显然,强制查询的调用(本例中为Single())应该调出,以适合您自己的应用程序