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

时间:2019-03-10 04:38:01

标签: c# .net xml nodes

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

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <Book>
    <Title>Hansel and Gretel</Title>
    <Pages>221</Pages>
    <Price>3.5</Price>
    <Author>Grimm</Author>
  </Book>
  <Book>
    <Title>Green Eggs and Ham</Title>
    <Pages>145</Pages>
    <Price>5.25</Price>
    <Author>Dr. Seuss</Author>
  </Book>
</Books>

1 个答案:

答案 0 :(得分:1)

您可以搜索所有父元素<Book>,而不是搜索同级元素,而条件条件子句将过滤它们的<Title>子元素具有特定值的子元素。然后,对于所有匹配项,返回三个所需子元素的值。

最简单的方法是使用LINQ to XML

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();

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

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"),
            });

演示小提琴here