Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

PLEASE HELP ME -- how to get data from a xml file using C#?

Posted on 2004-04-28
4
Medium Priority
?
392 Views
Last Modified: 2010-04-15
Hi, all,
i have a xml file like:
- <FORM name="Work Order">
  <CONTROL type="edittext" id="1000" windowtext="17089" order="0" key="15747">17089</CONTROL>
  <CONTROL type="edittext" id="1018" windowtext="TM1504" order="4" key="1064">TM1504</CONTROL>  
+ <CONTROL type="tabpane" id="106" windowtext="" order="6">
- <TAB name="Contractor">
  <CONTROL type="edittext" id="1211" windowtext="" order="2" />
  </TAB>
- <TAB name="Costs">
- <CONTROL type="tabpane" id="801" windowtext="" order="67">
- <TAB name="Labour">
- <CONTROL type="grid" id="1300" windowtext="" order="9" rows="1" cols="35">
- <ROW order="1">
  <COL name="Activity" order="1">TM1504</COL>
  <COL name="ACTDESC" order="2">P MACH - BREAKDOWN MAINTENANCE</COL>
  <COL name="Task" order="3" />
  <COL name="TASKKEY" order="4">1</COL>
  <COL name="" order="5">15747</COL>
  <COL name="Charge Date" order="6">12/08/1997</COL>
  <COL name="" order="7">10:44</COL>
  <COL name="Crew Type" order="8" />
  <COL name="Job Class" order="9" />
  <COL name="Employee ID" order="10">100236</COL>
  </ROW>
  </CONTROL>
  <CONTROL type="edittext" id="4216" windowtext="22.55" order="14">22.55</CONTROL>
  <CONTROL type="edittext" id="1316" windowtext="22.55" order="15">22.55</CONTROL>
  </TAB>
- <TAB name="Extra Item">
  <CONTROL type="grid" id="1470" windowtext="" order="44" rows="0" cols="19" />
  <CONTROL type="edittext" id="4216" windowtext="0.00" order="49">0.00</CONTROL>
  <CONTROL type="edittext" id="1479" windowtext="0.00" order="50">0.00</CONTROL>
  </TAB>
  </CONTROL>
  </TAB>
  </FORM>

this xml file is very complex.
I have to explain the structure : form "work order" has a few tabs, each tab may have a few subtabs, each tab may have a data grid ( like a table), each data grid has many rows, each row has many columns.

i have to read data from this xml file, for example, get  "Employee ID"  from this path :
tab name = "Cost" > subtab name = "Labour" > control type = "grid" > Row order = 1 > COL name = 'Employee ID"

how can i get ALL 'employee id' IN A DATA GRID by using C# ?  USING XPathNavigator,XmlTextReader or something else? could you please give me some example code? i really have no idea for how to do it.

many thanks
viola

0
Comment
Question by:viola123
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 21

Expert Comment

by:tovvenki
ID: 10946321
Hi,
can you try this
      Dim myDataSet as New DataSet()
   
        myDataSet.ReadXml(Server.MapPath("your xmlfile.xml"))
   
        dgBooks.DataSource = myDataSet
        dgBooks.DataBind()

Hope that this helps you.

Regards,
venki
0
 
LVL 2

Expert Comment

by:Vaishali_chaudhry
ID: 10946672
try using a  XMLReader ,if you actually want to go through each tab and check its significance...A sample code that i am using..

private void readCoumns(string TableName)
            {
                  bool foundTable=false;
                  String str;
                  rdr=new XmlTextReader(@"c:\multij\Employ4.xml");
                  while (rdr.Read() && !foundTable)
                  {
                        switch (rdr.NodeType)
                        {
                              case XmlNodeType.Element:
                                    str=rdr.Name;
                                          if(str.Equals("Table"))
                                    {
                                          rdr.MoveToNextAttribute();
                                          if(rdr.Value.Equals(TableName))
                                          {
                                                foundTable=true;
                                                int i=0;
                                                ctxMenuDetail.MenuItems.Clear();
                                                while(rdr.Read())
                                                {
                                                      if(rdr.Name.Equals("Column"))
                                                      {
                                                            rdr.MoveToNextAttribute();
                                                            ctxMenuDetail.MenuItems.Add(rdr.Value);
                                                            ctxMenuDetail.MenuItems[i++].Click+=new System.EventHandler(this.DetailMenuItemHandler);
                                                      }      
                                                      if(rdr.Name.Equals("PrimaryKey"))
                                                      {
                                                            break;
                                                      }
                                                }
                                          }
                                    }
                                    break;
                        }
                  }
                  rdr.Close();
            }

0
 
LVL 9

Accepted Solution

by:
Thalox earned 2000 total points
ID: 10946729

the above solution will bind the whole xml in a grid

if you only need the employeeid you can use the following

XmlDocument doc = new XmlDocument();
doc.Load("xmlfile");
            
// this will select all COL-nodes with name = Employee ID from the specified ROW - node
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/FORM/TAB[name='Cost']/TAB[name='Labour']/CONTROL[type='grid']/ROW[order='1']/COL[name='Employee ID']");      

// if it doesnt matter where (in which level / parent node) the nodes exist you could also write
XmlNodeList nodes = doc.DocumentElement.SelectNodes("//COL[name='Employee ID']");

// go through nodes and get value
string[] src = new string[nodes.Count];

for (int i = 0; i < src.Length; i++) {
   src[i] = nodes[i].Value;
}

// bind to grid
dg.DataSource = src;
dg.DataBind();


Thalox
0
 
LVL 6

Author Comment

by:viola123
ID: 10955179
hi, Thalox,
 i figured out this problem. code is the following:

---select only one 'employee ID'
string nd = "" ;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(strXMLFile);

// because type, name, order ... they all attributes of that node, so must use '@' to specify those attributes
XmlNode node = xmldoc.DocumentElement.SelectSingleNode("CONTROL[@type='tabpane']/TAB[@name='Costs']/CONTROL[@type='tabpane']/TAB[@name='Labour']/CONTROL[@type='grid']/ROW[@order='1']/COL[@name='Employee ID']");

//if you want to get value, please use 'InnerText' NOT 'Value'
nd = node.InnerText;

---select all 'employee ID'
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(strXMLFile);

XmlNodeList nodes = xmldoc.DocumentElement.SelectNodes("//COL[@name='Employee ID']");
string[] src = new string[nodes.Count];

for (int i = 0; i < src.Length; i++)
{
     src[i] = nodes[i].InnerText;
}

anyway, you gave me the whole idea. thank you very much.

BTW, tovvenki and vaishali chaudhry, thanks for your help.
viola
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

704 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question