Solved

Issue in parsing xml using C#

Posted on 2009-05-05
4
332 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
  • 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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
SASS allows you to treat your CSS code in a more OOP way. Let's have a look on how you can structure your code in order for it to be easily maintained and reused.
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

828 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