Wednesday, July 4, 2012

XML DATA READING NOTES


 XML BLOG
 =========

 http://neilkilbride.blogspot.in/search/label/XML


xpath navigator
===============
http://sreeprasad.tripod.com/id9.html


1) xmldatareading
   =================

   studnet.xml
   ===========

       <students>

            <student sno="1000">
        <sname name="ravi"></sname>
        <sqly>mca</sqly>
            </student>

            <student sno="2000">
        <sname name="varma"></sname>
        <sqly>mba</sqly>
                </student>
   
        </students> 

    XmlDocument objXmlDocument = null;
   
    objXmlDocument = new XmlDocument();
    objXmlDocument.LoadXml(xmlData);


    XmlNodeList nodelist = objXmlDocument.DocumentElement.SelectNodes("student");

  
     foreach (XmlNode node in nodelist)
        {
            XmlAttribute snoattribute = node.Attributes["sno"];
             
          

            sno = snoattribute.InnerText.ToString();
            sname = node.SelectSingleNode("sname").Attributes["name"].Value.ToString();
            sqly = node["sqly"].InnerText;
       
        }



2)   student.xml
     ------------


    <students>
    <student sno="1000">
        <sname name="ravi"></sname>
        <sqly>mca</sqly>
        <address id="ADD1000">
            <city>pqrcity</city>     
            <street>xyzstate</street>
            <contactno number="786"></contactno>
           
        </address>
       
    </student>

    <student sno="2000">
        <sname name="varma"></sname>
        <sqly>mba</sqly>

        <address id="ADD200">
            <city>mnpcity</city>
            <street>abcstate</street>
            <contactno number="420"></contactno>

        </address>

    </student>
   
</students>




        objxmldoc = new XmlDocument();
        objxmldoc.LoadXml(xmldata);
        XmlNodeList nodelist = objxmldoc.DocumentElement.SelectNodes("student");

        foreach (XmlNode node in nodelist)
        {

            string sno = node.Attributes["sno"].InnerText;
            string sname = node.SelectSingleNode("sname").Attributes["name"].InnerText;
            string sqly = node["sqly"].InnerText;


            string address = node["address"].Attributes["id"].Value;
            string city = node["address"].SelectSingleNode("city").InnerText;
            string contactno = node["address"].SelectSingleNode("contactno").Attributes["number"].Value;




3) Reading xml data



  3 levels

    node[ ].selectsinglenode(  ).attribute[  ]
 
  2 levels

   node[ ].selectsinglenod(  ).innertext

  1 level

   node[ ].attribute[ ].innetText

  0 level

  node[ ].innerText


4) XML CREATION
   ------------
   http://www.dotnetspider.com/resources/19581-Create-XML-File-Using-C-NET.aspx




5) XML TEMPLATE CREATION BASED ON DATA FROM DATABASE
   --------------------------------------------------

   UNDER PAGE_LOAD
   ---------------

        con = new SqlConnection(sqlconn);
        con.Open();
        cmd = new SqlCommand("sp_testtbl_getdata", con);
        cmd.CommandType = CommandType.StoredProcedure;
        dr = cmd.ExecuteReader();
     

         XmlTextWriter xmlWritter = new XmlTextWriter("E:\\Mtncommontpbill\\testing1.xml", Encoding.UTF8);
         xmlWritter.WriteStartDocument(true);
         xmlWritter.WriteStartElement("students");

        while (dr.Read())
        {
          


            //sno,[name],sqly,id,city,street,number TABLE COLUMN NAMES

          
            xmlWritter.WriteStartElement("student");

            xmlWritter.WriteStartAttribute("sno");
            //xmlWritter.WriteString("1000");
            xmlWritter.WriteString(dr["sno"].ToString());
            xmlWritter.WriteEndAttribute();


            xmlWritter.WriteStartElement("sname");
            xmlWritter.WriteStartAttribute("name");
            xmlWritter.WriteString(dr["name"].ToString());
            xmlWritter.WriteEndAttribute();
            xmlWritter.WriteEndElement();



            xmlWritter.WriteStartElement("sqly");
            xmlWritter.WriteString(dr["sqly"].ToString());
            xmlWritter.WriteEndElement();
          //  xmlWritter.WriteEndAttribute();


            xmlWritter.WriteStartElement("address");
            xmlWritter.WriteStartAttribute("id");
            xmlWritter.WriteString(dr["id"].ToString());
            xmlWritter.WriteEndAttribute();


            xmlWritter.WriteStartElement("city");
            xmlWritter.WriteString(dr["city"].ToString());
            xmlWritter.WriteEndElement();
           // xmlWritter.WriteEndAttribute();

            xmlWritter.WriteStartElement("street");
            xmlWritter.WriteString(dr["street"].ToString());
            xmlWritter.WriteEndElement();
          //  xmlWritter.WriteEndAttribute();


            xmlWritter.WriteStartElement("contactno");
            xmlWritter.WriteStartAttribute("number");
            xmlWritter.WriteString(dr["number"].ToString());
            xmlWritter.WriteEndAttribute();
            xmlWritter.WriteEndElement();


            xmlWritter.WriteEndElement(); // END OF ADDRESS

            xmlWritter.WriteEndElement(); // END OF STUDENT


           







           
        }
      //  xmlWritter.WriteEndElement(); //END OF student
        xmlWritter.WriteEndElement(); //END OF students
      //  xmlWritter.WriteEndElement(); //END OD rootelement

        xmlWritter.WriteEndDocument();
        xmlWritter.Flush();
        xmlWritter.Close();

        con.Close();
       


    OUTPUT:
   -----------

   <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <students>

        <student sno="1000">
            <sname name="ravi" />
            <sqly>mca</sqly>

            <address id="ADD1000">
                <city>vizag</city>
                <street>mvp</street>
                <contactno number="1245" />
            </address>

        </student>


        <student sno="2000">
            <sname name="varma" />
            <sqly>mba</sqly>

            <address id="ADD2000">
                <city>hyd</city>
                <street>srnagar</street>
                <contactno number="5421" />
            </address>

        </student>

    </students>


6) Get the specific node from the xml document
   --------------------------------------------


 i)       string tTemplate = string.Empty;
        string dTemplate = string.Empty;

        XmlDocument doc = new XmlDocument();
        doc.Load("E:\\xmlreading\\xml\\TemlConfig.xml");

        XmlNode elem = doc.DocumentElement;
        string s=  elem.InnerXml;
        dTemplate = elem.SelectSingleNode("LEVEL_2").InnerXml;

ii)

        string tTemplate = string.Empty;
        string dTemplate = string.Empty;
        string oTemplate = string.Empty;
        string sTemplateIXml = string.Empty;
        string sOutputemplateIXml = string.Empty;

        string detid = HttpContext.Current.Request["det"] != null ? HttpContext.Current.Request["det"] : string.Empty;
       
        XmlDocument doc = new XmlDocument();
        XmlDocument doc1 = new XmlDocument();

        // loading templateconfig file
        if (ConfigurationManager.AppSettings["TemlConfig"] != null)
            doc.Load(ConfigurationManager.AppSettings["TemlConfig"]);

        // loading outputemplate file
        if (ConfigurationManager.AppSettings["outputemplate"] != null)
            doc1.Load(ConfigurationManager.AppSettings["outputemplate"]);
     
        // assigning node from teplateconfig file and outputemplate file
        XmlNode elem = doc.DocumentElement;
        XmlNode elem1 = doc1.DocumentElement;

        sTemplateIXml = elem.InnerXml;
        sOutputemplateIXml = elem1.InnerXml.ToString();

        //assign the specific node from Templconfig file
        dTemplate = elem.SelectSingleNode("LEVEL_" + detid).InnerXml;
        Replacecontent(ref dTemplate);
        sOutputemplateIXml = sOutputemplateIXml.Replace("!RSSELEMENTS!", dTemplate);
        Response.ContentType = "xml";
        Response.Write(sOutputemplateIXml);
      }
    private void Replacecontent(ref string s)
    {
        s = s.Replace("!TITLE!", "testing title");
        s = s.Replace("!DESC!", "testing description");
        s = s.Replace("!DISPURL!", "testing dispurl");
   
    }

7) adding namespace to xml
   ------------------------

         XmlDocument data = new XmlDocument();

        XmlNamespaceManager xsl = new XmlNamespaceManager(data.NameTable);
        xsl.AddNamespace("yahoo:uri", "http://where.yahooapis.com/v1/place/2295414");
        data.Load(url);


8) Reading chidnodes based on condition(Related to Task2)

     if (ConfigurationManager.AppSettings["weatherplaceurl"] != null)
                url = Convert.ToString(ConfigurationManager.AppSettings["weatherplaceurl"]);

            url = url.Replace("!Replacename!", "hyderabad");

            XmlDocument data = new XmlDocument();

            XmlNamespaceManager xsl = new XmlNamespaceManager(data.NameTable);
            xsl.AddNamespace("yahoo:uri", "http://where.yahooapis.com/v1/place/2295414");
            data.Load(url);

            XmlNode objResultNode;
            XmlNodeList objWoeidNodeList;
            XmlElement root = data.DocumentElement;


            objResultNode = root.SelectSingleNode("results", xsl);
            if (objResultNode != null && objResultNode.ChildNodes.Count > 0)
            {
                objWoeidNodeList = objResultNode.ChildNodes;
                for (int intPriceNode = 0; intPriceNode < objWoeidNodeList.Count; intPriceNode++)
                {
                    XmlNode objWoeidNode = objWoeidNodeList[intPriceNode].ChildNodes[0];
                    if (objWoeidNode != null && objWoeidNode.Name.Trim().ToUpper() == "WOEID")
                    {
                        string strID = Convert.ToString(objWoeidNode.InnerText);

                        getResponse(strID);
                    }
                }


            }

9) saveing registration details in xml and check those details in xml
    =================================================================

    under registration button click
     ==============================

     if (!File.Exists("E:\\xmlreading\\xml\\Regxml.xml"))
        {

            XmlTextWriter xmlWritter = new XmlTextWriter("E:\\xmlreading\\xml\\Regxml.xml", Encoding.UTF8);
            xmlWritter.WriteStartDocument(true);
            xmlWritter.WriteStartElement("Details");


            xmlWritter.WriteStartElement("User");

            xmlWritter.WriteStartAttribute("Username");
            //xmlWritter.WriteString("1000");
            xmlWritter.WriteString(txtuname.Text.Trim().ToLower());

            xmlWritter.WriteStartAttribute("Password");
            //xmlWritter.WriteString("1000");
            xmlWritter.WriteString(txtpwd.Text.Trim());


            xmlWritter.WriteStartAttribute("CreatedDate");
            xmlWritter.WriteString(DateTime.Now.ToString());
           
            xmlWritter.WriteEndAttribute();
           
            xmlWritter.WriteEndElement(); // END OF ADDRESS

            xmlWritter.WriteEndElement(); // END OF STUDENT



            xmlWritter.WriteEndDocument();
            xmlWritter.Flush();
            xmlWritter.Close();
        }

        else
        {

            string filename = @"E:\xmlreading\xml\Regxml.xml";

            //create new instance of XmlDocument
            XmlDocument doc = new XmlDocument();

            //load from file
            doc.Load(filename);

            //create node and add value
            XmlNode node = doc.CreateNode(XmlNodeType.Element, "User", null);
            XmlAttribute UsernameAttr = doc.CreateAttribute("Username");
            UsernameAttr.Value = txtuname.Text;
            node.Attributes.Append(UsernameAttr);

            XmlAttribute PasswordAttr = doc.CreateAttribute("Password");
            PasswordAttr.Value = txtpwd.Text;
            node.Attributes.Append(PasswordAttr);

            XmlAttribute CreatedDateAttr = doc.CreateAttribute("CreatedDate");
            CreatedDateAttr.Value = DateTime.Now.ToString();
            node.Attributes.Append(CreatedDateAttr);
          
            doc.DocumentElement.AppendChild(node);

            //save back
            doc.Save(filename);
       
        }
      

   under checklogin button click
   ==============================

   XmlDocument doc = new XmlDocument();
        doc.Load("E:\\xmlreading\\xml\\Regxml.xml");
        XmlNodeList nodelist = doc.DocumentElement.SelectNodes("User");
        string strResult = string.Empty;
       // foreach (XmlNode node in nodelist)
       // {

       //     if (node.Attributes["Username"].Value == txtcheckuname.Text && node.Attributes["Password"].Value == txtcheckpwd.Text)
       //     {
       //         strResult = "success";
       //         break;
       //     }
       //     else
       //     {

       //         strResult = "Failed";
       //     }
       // }
      
       // if (strResult == "success")
       //     Response.Write("valid user");
       //else
       //     Response.Write("Invalid user");

        XmlNode rootnode = doc.DocumentElement;
        XmlNode objxmlN = rootnode.SelectSingleNode("User[@Username='" + txtcheckuname.Text.Trim().ToLower() + "']");

        if (objxmlN != null)
        {
            if (objxmlN.Attributes["Username"].Value == txtcheckuname.Text.Trim().ToLower() && objxmlN.Attributes["Password"].Value == txtcheckpwd.Text.Trim())
                Response.Write("Valid user");
            else
                Response.Write("Invalid user");
        }


NOTE:
eg: i am having 100 nodes to check specific node attribute value with out looping

    XmlNode rootnode = doc.DocumentElement;
        XmlNode objxmlN = rootnode.SelectSingleNode("User[@Username='" + txtcheckuname.Text.Trim().ToLower() + "']");


      if (objxmlN != null)
        {
            if (objxmlN.Attributes["Username"].Value == txtcheckuname.Text.Trim().ToLower() && objxmlN.Attributes     ["Password"].Value == txtcheckpwd.Text.Trim())
                Response.Write("Valid user");
            else
                Response.Write("Invalid user");
        }


10) XPATHNAVIGATION (follow this url http://www.codeproject.com/Articles/9494/Manipulate-XML-data-with-XPath-and-XmlDocument-C)


  
     protected void Page_Load(object sender, EventArgs e)
    {
        string s = string.Empty;
        XPathDocument document = new XPathDocument(@"E:\xmlreading\xpathnavigator\books.xml");
        XPathNavigator navigator = document.CreateNavigator();

        XPathNodeIterator nodes = navigator.Select("/bookstore/book/title"); //reading node value
        foreach (XPathNavigator item in nodes)
        {
       
          s += item.Value + "           ";
        }
        s = "";

        XPathNodeIterator nodes1 = navigator.Select("/bookstore/book/@genre");  // reading attribute value
        foreach (XPathNavigator item1 in nodes1)
        {

            s += item1.Value + "           ";
        }

        s = "";
        XPathNodeIterator nodes2 = navigator.Select("/bookstore/book/author/name");  // reading specifc  value
        foreach (XPathNavigator item2 in nodes2)
        {

            s += item2.Value + "           ";
        }


         s = "";
         XPathNodeIterator nodes3 = navigator.Select("/bookstore/book/author/first-name[text()='Herman']");  // reading specifc  value based on condition
        // XPathExpression expression;

      //   expression = navigator.Compile("/bookstore/book[author/first-name[text()='Herman'))"; // and @stufe='1']/@stufe");

         if (nodes3.Count > 0)
         {

             foreach (XPathNavigator item3 in nodes3)
             {

                 s += item3.Value + "           ";
             }
         }





       

    }

11) UPDATING PERTUCULAT NODE ITMES BASED ON CONDITION
    ================================================= 
 
        XmlTextReader reader = new XmlTextReader(@"E:\xmlreading\xpathnavigator\Catelogcd.xml");
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        reader.Close();


        //Select the Matching node with the cd title

        //Select the cd node with the matching title
        XmlNode oldCd;
        XmlElement root = doc.DocumentElement;
        oldCd = root.SelectSingleNode("/catalog/cd[title='" + "Greatest Hits" + "']");

        XmlElement newCd = doc.CreateElement("cd");
        newCd.SetAttribute("country", "INDIA");


        newCd.InnerXml = "<title>" + "NEWTITLE" + "</title>" +
                "<artist>" + "NEW ARTIST" + "</artist>" +
                "<price>" + "NEW PRICE" + "</price>";

        root.ReplaceChild(newCd, oldCd);

        //save the output to a file
        doc.Save("E:\\xmlreading\\xpathnavigator\\Catelogcd.xml");



No comments:

Post a Comment