我正在开发一个.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>
答案 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。