Solved

Issue in parsing xml using C#

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

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

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

Introduction Knockoutjs (Knockout) is a JavaScript framework (Model View ViewModel or MVVM framework).   The main ideology behind Knockout is to control from JavaScript how a page looks whilst creating an engaging user experience in the least …
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will the learn the benefit of plain text editors and code an HTML5 based template for use in further tutorials.

739 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