在c#中获取XML子值

时间:2017-10-01 12:55:36

标签: c#

我需要从xml文件中获取一些数据。

<book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
</book>

我如何根据类别获取年份?

所以它会像

  

writeline(FetchYearFromCategory(“cooking”));

它将输出2005

希望你能理解

3 个答案:

答案 0 :(得分:1)

您可以使用LINQ to Xml

// Load xml in the memory
var document = XDocument.Load(pathToXmlFile);

// Filter xml to find required data
var yearsOfCooking = 
    document.Descendants("book")
            .Where(book => book.Attribute("category").Value == "cooking")
            .Select(book => book.Element("year").Value);

// Print result
foreach (var year in yersOfCooking)
{
    Console.WriteLine(year);
}

答案 1 :(得分:0)

您正在寻找的工具称为XPath。您可以使用相对简单的语法定义要匹配的元素。 W3Schools有一个非常好的教程,如果您还不熟悉它。 Here是链接。

使用它的语法是:

// This will fetch all "book" items in the root node
// that have the category = "cooking"
// and select their year node.
var strXPathExpression = "/book[@category='cooking']/year";

var doc = new XmlDocument();
doc.Load("YourXmlFile.xml");

var root = doc.DocumentElement;

var desiredNodes = root.SelectNodes(strXPathExpression).

foreach (var node in desiredNodes)
{
    // You have your year here
    var year = node.Value;
}

答案 2 :(得分:0)

您可以使用System.Xml访问C#.NET中的XML文件

public int FetchYearFromCategory(string category){

XmlDocument doc = new XmlDocument();
doc.Load("path_to_your_file");

XmlNodeList allBooks = doc.GetElementsByTagName("book");
foreach (XmlNode singleBookNode in allBooks)
{
    if(singleBookNode.Attributes["category"] != null && singleBookNode.Attributes["category"].Value.Equals(category))
    {
        XmlNodeList childNodes = singleBookNode.ChildNodes; 
        foreach (XmlNode childNode in childNodes)
        {
            if(childNode.Name.Equals("year"))
            {
                return Int32.Parse(childNode.InnerText);
            }           
        }       
    }   
}
return -1;}

我认为以上应该是你的工作。