Solved

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

Posted on 2004-04-28
4
384 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
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 500 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Data Saving(2) 2 41
How can I set a timer to automatically take a picture using the Xamarin MediaPlugin 2 47
Programmatically signing Word macros 4 61
Syntax Error 2 47
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

867 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now