Gokul's Blog

Xpath: Get Distinct node values in Xpath

Leave a comment

Xpath to select nodes with distinct attribute value 

Getting a list of nodes with distinct value in an attribute using xpath . The key is to use the preceding keyword.

The Xpath query will return only the distinct nodes. I used sketchpath to learn/arrive at the this example Xpath Query. This is is similar to the Regex editor we use for Regular Expressions.

Example Xpath Query: //Schedule[not(./@SourceID=preceding::Schedule/@SourceID)]

Sample Xml:

<ns0:Listings xmlns:ns0="http://myTest.Namespace">
        <Program ProgramTitle="Program - 1025">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="123"></Schedule>
        <Program ProgramTitle="Program - 1225">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="123" ></Schedule>
        <Program ProgramTitle="Program - 1405">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="124"></Schedule>
        <Program ProgramTitle="Program - 1505">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="145"></Schedule>
                <Schedule SourceID="146"></Schedule>
        <Program ProgramTitle="Program - 2005">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="225"></Schedule>
Tool: Sketchpath Link & download sketchpath utility from my blog
Another good tool is xmlviewer from bizbert.com. From my blog
Some gotchas and refernce links for Xpath:
Disclaimer: I host these tools on my site for quick access. As I had experience with some other tools, either the sites go 
missing or down for maintenance when needed. So please goto the respective sites for download as mentioned. If you don't get
them, get it from here.

.csharpcode, .csharpcode pre
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
background-color: #f4f4f4;
width: 100%;
margin: 0em;
.csharpcode .lnum { color: #606060; }


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s