Gokul's Blog

Get Xpath Value from XMLTextReader

Leave a comment

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

Advertisements

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s