Itz.Irshad
Itz.Irshad

Reputation: 1024

Searching in XML Document

What is best way to search in XML document to retrieve one or more records against search criteria. Suggestions are welcomed.

Upvotes: 2

Views: 6140

Answers (3)

Ria
Ria

Reputation: 10347

Use XPath by XmlDocument.SelectNodes or SelectSingleNode like this:

XmlDocument doc = new XmlDocument();
doc.Load("bookstore.xml");
XmlNode root = doc.DocumentElement;

// Add the namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:newbooks-schema");

// Select and display the first node in which the author's 
// last name is Kingsolver.
XmlNode node = root.SelectSingleNode(
"descendant::bk:book[bk:author/bk:last-name='Kingsolver']", nsmgr);
Console.WriteLine(node.InnerXml);

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1500465

Personally I'd use LINQ to XML if you possibly can. Your question is very vague at the moment, but for example, you could write:

XDocument doc = XDocument.Load("test.xml");
var matches = doc.Descendants("Person")
                 .Where(x => (string) x.Attribute("Name") == "Jon")
                 .Where(x => x.Elements("Child").Count() >= 2);

While you can use XPath, I generally prefer not to - it has all the normal problems of embedding one language within another, whereas using LINQ to XML you're using C# throughout, so you have no new syntax to learn - just the relevant methods within the LINQ to XML library.

LINQ to XML also makes namespace handling simple, and you don't need to worry about escaping values etc, as your query is all in code rather than in a string.

Upvotes: 8

nunespascal
nunespascal

Reputation: 17724

.net xml documents have good support for xpath.

It should work for most of your xml searches.

Take a look at XPath Examples

Upvotes: 2

Related Questions