C# 如何根据同级节点的值获取XML节点?

C# 如何根据同级节点的值获取XML节点?,c#,.net,xml,nodes,C#,.net,Xml,Nodes,我正在开发一个.Net应用程序,我需要根据它的同级节点的值从XML文件中获取值。例如:在XML中,我想根据标题“Hansel and Gretel”获取Pages、Price&Author中的值 汉瑟和格雷特 221 3.5 格林 绿鸡蛋和火腿 145 5.25 苏斯博士 您可以搜索所有父元素,而不是搜索同级元素,使用条件子句筛选那些子元素具有特定值的父元素。然后,对于所有匹配项,返回三个所需子元素的值 这可以通过以下方式轻松完成: 但是,如果您喜欢使用查询,可以执行以下操作: var que

我正在开发一个.Net应用程序,我需要根据它的同级节点的值从XML文件中获取值。例如:在XML中,我想根据标题“Hansel and Gretel”获取Pages、Price&Author中的值


汉瑟和格雷特
221
3.5
格林
绿鸡蛋和火腿
145
5.25
苏斯博士

您可以搜索所有父元素
,而不是搜索同级元素,使用条件子句筛选那些子元素
具有特定值的父元素。然后,对于所有匹配项,返回三个所需子元素的值

这可以通过以下方式轻松完成:

但是,如果您喜欢使用查询,可以执行以下操作:

var query = root
    .XPathSelectElements(string.Format("/Book[Title='{0}']", title))
    .Select(e => new 
            {
                Pages = (int)e.Element("Pages"),
                Price = (decimal)e.Element("Price"),
                Author = (string)e.Element("Author"),
            });

演示小提琴。

到目前为止您尝试了什么?LINQ到Xml和XPath之间的区别是什么?为什么有人会喜欢使用XPath而不是LINQ?@Fabio-是一个Microsoft API,它提供了一种将XML作为文档对象模型加载到内存中的方法,允许使用LINQ统一函数查询语法轻松查询。是一种独立于平台的XML文本查询语言。Microsoft通过支持用于LINQ到XML对象的XPath如果您更熟悉LINQ,请使用LINQ。如果您更熟悉XPath,请使用它是.NET标准的一部分,应该可以在任何平台上使用。
var root = XElement.Parse(xmlString);

var title = "Hansel and Gretel";

var query = root
    .Elements("Book")
    .Where(e => (string)e.Element("Title") == title)
    .Select(e => new 
            {
                Pages = (int)e.Element("Pages"),
                Price = (decimal)e.Element("Price"),
                Author = (string)e.Element("Author"),
            });

var results = query.ToList();
var query = root
    .XPathSelectElements(string.Format("/Book[Title='{0}']", title))
    .Select(e => new 
            {
                Pages = (int)e.Element("Pages"),
                Price = (decimal)e.Element("Price"),
                Author = (string)e.Element("Author"),
            });