How to get values from an XML file matching XPath query in C#

孤街醉人 提交于 2020-01-21 20:00:34

问题


I'm wondering whether there is a way using C# which enables me to return all the inner values within an XML file matching a given XPath query.

Let's suppose that we have the following Xml file named exampleWithFruits.xml:

<fruits>
   <bananas>
      <banana id="1" color="yellow" price="0.5" />
      <banana id="2" color="yellow" price="0.4" />
      <banana id="3" color="yellow" price="0.6" />
   </bananas>
   <apples>
      <apple id="1" color="red" price="0.5" />
      <apple id="2" color="red" price="0.4" />
      <apple id="3" color="green" price="0.6" />
      <apple id="4" color="yellow" price="0.4" />
   </apples>
   <oranges>
      <orange id="1" color="orange" price="0.5" />
      <orange id="2" color="orange" price="0.5" />
   </oranges>
</fruits>

Something like following below:

string xmlFilePath = "exampleWithFruits.xml";
string xPathQuery = "//fruits/apples//@color"
string[] matchingValues = interestingFunction(xmlFilePath, xPathQuery);
//for instance we would get something like : matchingValues = {red, red, green, yellow}

To sum up, I would like to know how to create a function such as interestingFunction

Thx


回答1:


One way to do this is to use System.Xml.XPath.Extensions.XPathEvaluate.

E.g.

string xmlFilePath = "exampleWithFruits.xml";
string xPathQuery = "//fruits/apples//@color";

var doc = XDocument.Load(xmlFilePath);
IEnumerable att = (IEnumerable)doc.XPathEvaluate(xPathQuery);
string[] matchingValues = att.Cast<XAttribute>().Select(x => x.Value).ToArray();

Or if you prefer XmlDocument:

var doc = new XmlDocument();
doc.Load(xmlFilePath);
string[] matchingValues = doc.SelectNodes(xPathQuery).Cast<XmlAttribute>().Select(x => x.Value).ToArray();


来源:https://stackoverflow.com/questions/12951593/how-to-get-values-from-an-xml-file-matching-xpath-query-in-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!