Linq to XML 从 config.xml 选择节点(Lambda 表达式或经典查询)
Posted
技术标签:
【中文标题】Linq to XML 从 config.xml 选择节点(Lambda 表达式或经典查询)【英文标题】:Linq to XML select node from config.xml (Lambda expression or classic query) 【发布时间】:2015-10-19 08:58:36 【问题描述】:我正在使用 .net 4.0 winforms。在我的应用程序中有一个配置文件(config.xml),在这个文件上我有很多节点和子节点,都是不同的,我想选择特定节点和所选节点内的节点。
我尝试了很多解决方案,但都没有成功。
提前感谢您的帮助。
【问题讨论】:
您可以使用XDocument
加载 xml 并在对象上调用适当的方法。
您好,请给我更多的示例解释。
@user3066993 - 您在maintenance_anomalies
标签中查找哪个特定标签值?
这应该会给你正确的结果:-
XDocument doc = XDocument.Load(@"XMLFilePath");
XNamespace ns = "http://schemas.datacontract.org/2004/07/Silvio.Settings";
var result = doc.Root.Element(ns + "maintenance_anomalies")
.Descendants(ns + "nom_operation")
.Select(x =>
new
NomOperation = (string)x,
statutList = x.Parent.Element(ns + "statuts")
.Elements(ns + "statut")
.Select(z => (string)z).ToList()
).ToList();
方法:
从 Xdocument 对象中选择根节点 Main
。从中选择元素maintenance_anomalies
,包括与其关联的命名空间。从那里您可以选择nom_operation
的所有后代并获取它的值。要在nom_operation
中查找所有statut
,请返回父节点operation
,然后从那里选择所有statut
元素。
你也可以投影一个类型而不是匿名类型。
得到以下输出:-
【讨论】:
@user3066993 - 这是与您的 XML 关联的命名空间。已更新。 很好的解释。非常感谢。工作正常。 @user3066993 - 不客气 :) 如果对您有帮助,您可以接受答案。 meta.stackexchange.com/questions/5234/…【参考方案2】:您的 xml 存在一些问题。首先有一个无效字符,所以不要使用 Load 方法。还有一个命名空间问题,所以我使用 Where 方法来获取标签 maintenance_anomalies。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication53
class Program
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
string file = File.ReadAllText(FILENAME);
XDocument doc = XDocument.Parse(file);
XElement maintenance_anomalies = doc.Descendants().Where(x => x.Name.LocalName == "maintenance_anomalies").FirstOrDefault();
XNamespace ns = maintenance_anomalies.Name.Namespace;
var results = maintenance_anomalies.Elements(ns + "operation").Select(x => new
nom_operation = x.Element(ns + "nom_operation").Value,
statut = string.Join(",",x.Descendants(ns + "statut").Select(y => y.Value).ToArray())
).ToList();
【讨论】:
嗨,到目前为止一切顺利吗?那么如何选择下面的行应该让你访问你请求的节点。使用这是你的班级using System.Xml;
XmlDocument XmlDocObj = new XmlDocument();
XmlNode UserNameNode = XmlDocObj.SelectSingleNode("maintenance_anomalies");
【讨论】:
您好,请给我更多的示例解释。 @user3066993 XmlDocument 允许您通读 Xml 文档,其中 .SelectSingleNode 选择您要访问的节点。以上是关于Linq to XML 从 config.xml 选择节点(Lambda 表达式或经典查询)的主要内容,如果未能解决你的问题,请参考以下文章
Translate this app.config xml to code? (WCF) z
使用 linq to xml 从 xml 文档中删除 xmlns="something"
升级jenkins之后无法启动 报错Unable to read /var/lib/jenkins/config.xml