Click here to Skip to main content
13,398,889 members (35,457 online)
Click here to Skip to main content
Add your own
alternative version


25 bookmarked
Posted 16 Dec 2003

Advanced XPath Analyzer

, 30 Dec 2003
Rate this:
Please Sign up or sign in to vote.
An advanced XPath Query Analyzer, based on the work of Enrico Elizar Samuel. This advanced version supports namespaces resolution.


This is an advanced version of the good XPath Analyzer done by Enrico Elizar Samuel ( Advanced XPath Analyzer has been re-written in C# and supports namespaces resolution and navigation.

Notes about the code

The main difference from the original XPath Analyzer is that you can navigate into an XML document using qualified names. It is also possibile to have a default namespace in the XML document. In this case a the namespace prefix will be def, so that you can refer to it in your xpath expression.

Let's say that, for example, we have an XML document that looks like this one:

<?xml version="1.0" encoding="utf-8"?>
<items link="~/Html/Default.htm" xmlns=http://site/menu 


    xsi:schemalocation="http://site/menu menu.xsd">
    <item title="Products" link="#">
        <item title="Product 1" link="#"/>
        <item title="Product 2" link="#"/>
        <item title="Product 3" link="#"/>
        <item title="Product 4" link= "#"/>
    <item title="Services" link="#">
        <item title="Service 1" link="#" />
        <item title="Service 2" link="#" />
    <item title="People" link="#"/>
    <item title="Opening Hours" link="#"/>
    <item title="Prices" link="#"/>
    <item title="Contacts" link="#"/>

That is, as you may have guessed, the navigation menu of a simple website. If you need to get the Product 3 link, you should write an XPath query like:


but this query won't give any result! This because you need to specify that the elements items and item belongs to the default namespace http://site/menu as it really is, otherwise the parser will understand that they aren't associated with any namespace.
So, the correct query is:


in order to run correctly this query you first need to define that the prefix def points to the default namespace URI. With the Advanced XPath Analyer you can just manually add the namespace or ask to it to detect it automatically, but what really happens behind the scenes?
Three steps are needed to make the XPath query run without errors:

  1. Define an XmlNamespaceManager with all the needed namespaces
  2. Create an XPathExpression that contains the relative XPath Expression
  3. Assign the created XmlNamespaceManager object to that XPathExpression

That, in pratice, means to write something like:

XmlNamespaceManager namespaceManager = 
    new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace(prefix, uri);
XPathExpression expression = navigator.Compile(xpathQuery);

Where prefix and uri are the variables that contains the relative values, and navigator is the XPathNavigator that you're using to navigate through the document.

Using the program

You have to specify the XML source file (which can be a file on your hard disk or a file somewhere in the web) and then the XPath Query you'd like to test. You can also specify a SQLXML url so that you can test your SQLXML Queries. If your XML uses namespaces you have to add it in the left panel so that you can use them in your XPath Query, otherwise you can detect it automatically, clickin' on the Detect Namespace button. Of course remember to do this before you analyze the XPath Query!

Location of XML document:


XPath query:



  • v 1.0: First version
  • v 1.1: Added automatic namespace discovery


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Web Developer
Italy Italy
Born in 1977, works as a freelancer, focusing on Database / Software Architecture.
In the free time writes articles for two of the major Italian programming magazines (Computer Programming and VBJ) and also develops nice and useful programs.
His major interests and skills are the .NET framework (C# in particular) and SQL Server.

You may also be interested in...

Comments and Discussions

QuestionXPath Query doesn't work if you have multi-level namespace without prefix. [modified] Pin
maggiesrara3-Oct-07 7:48
membermaggiesrara3-Oct-07 7:48 
GeneralSugestion Pin
Adrian Bacaianu8-Sep-04 22:27
memberAdrian Bacaianu8-Sep-04 22:27 
GeneralNamespace problem Pin
Charles E. Wagner Jr.23-Dec-03 11:51
memberCharles E. Wagner Jr.23-Dec-03 11:51 
GeneralRe: Namespace problem Pin
ManOwaR23-Dec-03 22:58
memberManOwaR23-Dec-03 22:58 
QuestionWhat's advanced? Pin
Stephane Rodriguez.17-Dec-03 2:23
memberStephane Rodriguez.17-Dec-03 2:23 
AnswerRe: What's advanced? Pin
ManOwaR17-Dec-03 3:23
memberManOwaR17-Dec-03 3:23 
GeneralRe: What's advanced? Pin
Uwe Keim17-Dec-03 23:06
sitebuilderUwe Keim17-Dec-03 23:06 
GeneralRe: What's advanced? Pin
ManOwaR17-Dec-03 23:15
memberManOwaR17-Dec-03 23:15 
GeneralRe: What's advanced? Pin
Daniel Cazzulino22-Dec-03 15:41
memberDaniel Cazzulino22-Dec-03 15:41 
GeneralRe: What's advanced? Pin
ManOwaR22-Dec-03 21:48
memberManOwaR22-Dec-03 21:48 
GeneralRe: What's advanced? Pin
Daniel Cazzulino23-Dec-03 0:59
memberDaniel Cazzulino23-Dec-03 0:59 
GeneralRe: What's advanced? Pin
ManOwaR23-Dec-03 8:59
memberManOwaR23-Dec-03 8:59 
Hey man you're missing this snippet take fome the CodeProject presentation: "The Code Project is a community of Visual Studio .NET developers joined together with a common goal: To learn, to teach, to have fun programming. Developers from all over the world come together to share source code, tutorials and knowledge for free to help their fellow programmers."

So, in the CodeProject site you'll find anything, not only what *YOU* like...i release code and articles just cause i think it will help other people that got stuck in problems similar to the one i found, so that i can be of some help to them, no matter how "advaced" this help could be...i really do not have any kind of interest of just appearing in a aim is to help other programmers as others did for me, since i believe in addition you should be smart enough to understand that "advanced" has a very relative meaning for everyone.

Btw, check you're site at, since, though it is a very advanced project, it seems to produce a very simple result: "Server Error in '/' Application."

This is my final word to this little "flame" since i do not want to spend any other minute on this, and, in addition, i don't think that other people are interested in this discussion. I just invite you to respect more the work of other programmars: if you don't like what they publish just pass by.

Have a nice Christmans.


GeneralRe: What's advanced? Pin
Daniel Cazzulino23-Dec-03 10:41
memberDaniel Cazzulino23-Dec-03 10:41 
GeneralRe: What's advanced? Pin
ManOwaR26-Dec-03 1:02
memberManOwaR26-Dec-03 1:02 
AnswerRe: What's advanced? Pin
Charles E. Wagner Jr.23-Dec-03 11:50
memberCharles E. Wagner Jr.23-Dec-03 11:50 
GeneralRe: What's advanced? Pin
Daniel Cazzulino6-Jan-04 6:35
memberDaniel Cazzulino6-Jan-04 6:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.180218.2 | Last Updated 31 Dec 2003
Article Copyright 2003 by manowar
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid