XmlDocument GetElementsByTagName within a specified block in C#

c#, linq-to-xml, xml, xmldocument

Solution

You are not using Linq to XML:

var doc = XDocument.Load("data.xml");

var bookNodes = doc.Descendants("book").Where(b=> b.Parent.Name == "shop");

using regular System.Xml:

var doc = new XmlDocument();
doc.Load("data.xml");
var bookNodes = doc.SelectNodes(@"//bookstore/book");
foreach (XmlNode item in bookNodes)
{
    string title = item.SelectSingleNode("./title").InnerText;
    string price = item.SelectSingleNode("./price").InnerText;
    Console.WriteLine("title {0} price: {1}",title,price); //just for demo
}

Problem

I have an xml file and currently I am getting element-by-tag-name. What I am trying to achieve is to specify which block to use, such as bookstore or shop. Thank you for any help and advice. XML: ``` <VariablesSpecs name="Data01"> <bookstore> <book genre='novel' ISBN='10-861003-324'> <title>The Handmaid's Tale</title> <price>19.95</price> </book> </bookstore> <shop> <book genre='novel' ISBN='10-861003-324'> <title>The Handmaid's Tale</title> <price>19.95</price> </book> </shop> </VariablesSpecs> ``` Code: ``` var doc = new XmlDocument(); doc.Load("data.xml"); var bookNodes = doc.GetElementsByTagName("book"); foreach (var bookNode in bookNodes) { // Collect data. } ```

Original source