HOW TO: Specify Namespaces When You Use an XmlDocument to Execute XPath Queries in Visual C# .NET (318545)
The information in this article applies to:
- Microsoft Visual Studio .NET (2003), Enterprise Architect Edition
- Microsoft Visual Studio .NET (2003), Enterprise Developer Edition
- Microsoft Visual Studio .NET (2003), Academic Edition
- Microsoft Visual Studio .NET (2002), Professional Edition
- Microsoft Visual Studio .NET (2002), Enterprise Architect Edition
- Microsoft Visual Studio .NET (2002), Enterprise Developer Edition
- Microsoft Visual Studio .NET (2002), Academic Edition
- Microsoft XML Classes (included with the .NET Framework 1.1)
- Microsoft XML Classes (included with the .NET Framework 1.0)
This article was previously published under Q318545 For a Microsoft Visual Basic .NET version of this article, see 316913.
IN THIS TASKSUMMARY
This step-by-step article demonstrates how to use the System.Xml.XmlDocument class to execute XPath queries against XML documents that define and use namespace prefixes to qualify element and attribute names.
back to the top
Create the XML Document- Use Notepad to create a new XML document that contains the following code:
<?xml version='1.0'?>
<Books xmlns="urn:Books" xmlns:pub="urn:Publisher">
<Book>
<Title>Beginning XML</Title>
<pub:Publisher>Wrox</pub:Publisher>
</Book>
<Book>
<Title>XML Step by Step</Title>
<pub:Publisher>MSPress</pub:Publisher>
</Book>
<Book>
<Title>Professional XML</Title>
<pub:Publisher>Wrox</pub:Publisher>
</Book>
<Book>
<Title>Developing XML solutions</Title>
<pub:Publisher>MSPress</pub:Publisher>
</Book>
</Books>
- Save the document as c:\books.xml.
back to the top
Create the Visual C# .NET Application- Create a new Visual C# .NET Windows Application project.
- Drag a command button control from the toolbox to the designer surface of Form1.cs.
- Paste the following code in the Click event procedure of the command button:
//Instantiate an XmlDocument object.
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
//Load books.xml into the XmlDocument object.
xmldoc.Load("C:\\books.xml");
//Instantiate an XmlNamespaceManager object.
System.Xml.XmlNamespaceManager xmlnsManager = new System.Xml.XmlNamespaceManager(xmldoc.NameTable);
//Add the namespaces used in books.xml to the XmlNamespaceManager.
xmlnsManager.AddNamespace("bk", "urn:Books");
xmlnsManager.AddNamespace("pub", "urn:Publisher");
System.Xml.XmlNodeList MSPressBookList;
//Execute the XPath query using the SelectNodes method of the XmlDocument.
//Supply the XmlNamespaceManager as the nsmgr parameter.
//The matching nodes will be returned as an XmlNodeList.
//Use an XmlNode object to iterate through the returned XmlNodeList.
MSPressBookList = xmldoc.SelectNodes("//pub:Publisher[. = 'MSPress']/parent::node()/bk:Title", xmlnsManager);
foreach (System.Xml.XmlNode MSPressBook in MSPressBookList)
{
System.Diagnostics.Debug.WriteLine(MSPressBook.InnerText);
}
- Read the inline comments to understand the functionality of the code.
- The XmlNamespaceManager object is designed to serve as a collection of namespace definitions. It is used by the .NET Framework XML processors to resolve and manage the scope of namespaces used in XML documents. In the above example, pay specific attention to the following lines of code:
xmlnsManager.AddNamespace("bk", "urn:Books")
xmlnsManager.AddNamespace("pub", "urn:Publisher")
- The AddNamespace method of an XmlNamespaceManager object is used to add a specified namespace to its namespace collection. It takes 2 parameters: the namespace prefix and the namespace URI. The above code is used to add the definitions of the two namespaces defined and used in books.xml to an XmlNamespaceManager object. books.xml overrides the default XML namespace (xmlns="urn:Books"), and defines a custom namespace (xmns:pub="urn:Publisher"). A custom user-defined prefix needs to be specified when adding an overridden default XML namespace URI to an XmlNamespaceManager collection. This prefix should then be used in XPath query expressions to qualify all element and attribute names that belong to the default XML namespace. In the sample code, the custom prefix bk is associated with the overriden default namespace URI. It is then used in the XPath query to qualify the Title element. (The Title element belongs to the overriden default XML namespace in books.xml.)
- The XmlNamespaceManager object is then supplied as the nsmgr (Namespace manager) parameter in the call to the SelectNodes method of the XmlDocument object to provide the namespace resolution and scope management required to successfully execute the specified XPath query. The XPath query in this sample is written to select the titles in books.xml of all books published by MSPRESS.
back to the top
Test the Code- Save the changes to the Visual C# .NET project, and then run it.
- When the form is displayed, click the command button to execute the code. The following output listing the matching titles is displayed in the Visual Studio .NET Output window:
XML Step by Step
Developing XML solutions
back to the top
REFERENCESFor additional information, click the article number below
to view the article in the Microsoft Knowledge Base:
313828 INFO: Roadmap for Executing XPath Queries in .NET Applications
Modification Type: | Minor | Last Reviewed: | 5/23/2005 |
---|
Keywords: | kbHOWTOmaster KB318545 kbAudDeveloper |
---|
|