Gokul's Blog


Leave a comment

Get Xpath Value

 string[] fileEntries = Directory.GetFiles(txtFolderName.Text);

string sXpathQuery = @"//ns0:MyXpath"; ;
string xmlNameSpacePrefix = "ns0"
                        , xmlNameSpace = @"http://MyNamespace/";
    foreach (string fileName in fileEntries)
    {
        try
        {
                // Load the document and set the root element.
                XmlDocument xdoc = new XmlDocument();
                xdoc.Load(fileName);
                XmlNode root = xdoc.DocumentElement;

                XmlNodeList nodeList;
                if (!string.IsNullOrEmpty(xmlNameSpace))
                {
                    // Add the namespace.
                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
                    nsmgr.AddNamespace(xmlNameSpacePrefix, xmlNameSpace);
                    nodeList = root.SelectNodes(sXpathQuery, nsmgr);
                }
                else
                {
                    nodeList = root.SelectNodes(sXpathQuery);
                }

                foreach (XmlNode node in nodeList)
                {
                    //if(node.LastChild.InnerText  == "ABCD")
                        txtStatus.Text = txtStatus.Text + node.LastChild.InnerText + ", " 
+ fileName + Environment.NewLine; } } catch (Exception ex) { Console.WriteLine(ex.StackTrace.ToString()); throw ex; } }

.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; }
.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 comment

Get Xpath Value from XMLTextReader

The below code is used to get Xpathvalue from a xmltextreader object. 
Thanks to Naresh(my-colleague) for this quick snippet.
      void TestOne(XmlTextReader reader,string xpathQuery)
        {
            System.Console.WriteLine("TestOne");
            XPathDocument xdoc = new XPathDocument(reader);
            XPathNavigator nav = xdoc.CreateNavigator();
            XPathNodeIterator nodeItor = nav.Select(xpathQuery);
             //"STUFF/TYPE1/CENSUS[@COUNTRY='USA' and @YEAR='1930']/PAGE");
            nodeItor.MoveNext();
            TraverseSiblings(nodeItor);
            System.Console.WriteLine();
        }

         void TraverseSiblings(XPathNodeIterator nodeItor)
        {
            XPathNodeIterator igor = nodeItor.Clone();
            PrintNode(igor.Current);
            igor.Current.MoveToNext();
            bool more = false;
            do
            {
                PrintNode(igor.Current);
                more = igor.Current.MoveToNext();
            } while (more);
        }

         void PrintNode(XPathNavigator nav)
        {
            System.Console.WriteLine(nav.Name + ":" + nav.Value +
                " Type : " + nav.NodeType.ToString());
        }
 
 
One more code sample which I have implemented 
            XPathNavigator nav;
            XPathDocument doc;
            XPathNodeIterator NodeIter;
            String rv=string.Empty;

            doc = new XPathDocument(reader);
            nav = doc.CreateNavigator();
            //sXpathQuery = @"//EmployeeName/attribute::SourceID";
            System.Diagnostics.Debug.WriteLine("Source Id:  {0}", nav.Evaluate(sXpathQuery).ToString());
                NodeIter = nav.Select(sXpathQuery);
                while (NodeIter.MoveNext())
                {
                    rv=NodeIter.Current.InnerXml;

                    System.Diagnostics.Debug.WriteLine("------------item start------------------");
                    System.Diagnostics.Debug.WriteLine(rv);
                    System.Diagnostics.Debug.WriteLine("-------------item end-------------------");
                    //Console.WriteLine(NodeIter.Current.Value);
                    //Console.WriteLine("////////////////////////////////");

                    if (!string.IsNullOrEmpty(rv))
                        break;
                }
Other interesting links

.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 comment

Xpath: Get Distinct node values in Xpath

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">
    <Programs>
        <Program ProgramTitle="Program - 1025">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="123"></Schedule>
            </Schedules>
        </Program>
        <Program ProgramTitle="Program - 1225">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="123" ></Schedule>
            </Schedules>
        </Program>
        <Program ProgramTitle="Program - 1405">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="124"></Schedule>
            </Schedules>
        </Program>
        <Program ProgramTitle="Program - 1505">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="145"></Schedule>
                <Schedule SourceID="146"></Schedule>
            </Schedules>
        </Program>
        <Program ProgramTitle="Program - 2005">
            <Schedules xmlns:ns0="http://Mytest.Namespace2">
                <Schedule SourceID="225"></Schedule>
            </Schedules>
        </Program>
    </Programs>
</ns0:Listings>
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; }