Solved

Issue in parsing xml using C#

Posted on 2009-05-05
4
334 Views
Last Modified: 2013-11-18
Hi all,
I am facing some problem in getting the attribute values from a xml file using C#. I have attached the code snippet.

My program accepts an input structure from an xml file (see attachment). It parses the file and then gets all the column names that is in turn used to create columns in Grid view control. The issue is... I am not able to get the column names if the node has some sub nodes.

In the attached xml file, you can see the <member Name"elemDesc" type="unsigned int"> has one or more sub nodes <Value></Value>. In this case the column names are not getting displayed.
But works fine if the node does not have any sub nodes as in <member Name = "Type" type = "unsigned int" />

I am sure the problem lies in the expression passed. Please help me resolve this issue. without this I will not be able to proceed with my work comfortable :(

private void ReadInputStructure(ref List<string> Items, string deviceName)
        {            
            try
            {   
                string fileName = "D:\\Ultrasound\\Initiatives\\StructureInput.xml";
                XPathDocument doc = new XPathDocument(fileName);
                XPathNavigator nav = doc.CreateNavigator();
 
                // Compile a standard XPath expression
                XPathExpression expr;
                expr = nav.Compile("/devices/device[@Name=\"" + deviceName + "\"]/member");
                XPathNodeIterator iterator = nav.Select(expr);                
                while (iterator.MoveNext())
				{
					XPathNavigator nav2 = iterator.Current.Clone();                    
					nav2.MoveToFirstChild();
                    string ColumnName = nav2.GetAttribute("Name", nav2.NamespaceURI);                    
                    Items.Add(ColumnName);  
				}                
			}
			catch(Exception ex) 
			{
				Console.WriteLine(ex.Message);
			}            
        }

Open in new window

StructureInput.txt
0
Comment
Question by:yamurthy
[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
  • 2
4 Comments
 
LVL 39

Assisted Solution

by:abel
abel earned 100 total points
ID: 24303370
It seems that all you are interested in is the Name attribute, correct? Why not change your XPath to only select the name attributes, like this?:

expr = nav.Compile("/devices/device[@Name=\"" + deviceName + "\"]/member/@Name");
0
 
LVL 6

Accepted Solution

by:
openshac earned 400 total points
ID: 24303401
Can you give the output you are after, I'm a little unsure of what you want.

I don't know if the following will work:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
 
foreach(XmlNode node in xmlDoc.SelectNodes("/devices/device[@Name=\"" + deviceName + "\"]/member"))
{
    Items.Add(node.Attributes["Name"].Value);
}

Open in new window

0
 
LVL 1

Author Closing Comment

by:yamurthy
ID: 31577950
I finally used openshac's solution. this worked fine and reduced my code size and simplified code reading!!! :) Thanks for your replies
0
 
LVL 39

Expert Comment

by:abel
ID: 24327831
You're welcome :)
0

Featured Post

Enroll in June's Course of the Month

June's Course of the Month is now available! Every 10 seconds, a consumer gets hit with ransomware. Refresh your knowledge of ransomware best practices by enrolling in this month's complimentary course for Premium Members, Team Accounts, and Qualified Experts.

Question has a verified solution.

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

Styling your websites can become very complex. Here I'll show how SASS can help you better organize, maintain and reuse your CSS code.
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.
The viewer will the learn the benefit of plain text editors and code an HTML5 based template for use in further tutorials.
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

726 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