Solved

reading xml file using c#?

Posted on 2012-03-12
10
244 Views
Last Modified: 2012-03-14
Hi,
How do I read xml file using c# so I can apply regex to remove <style> tags?
Then save it as xml file.

Basically I want to remove <style> tags but save value in between tags.

<customerid><style face="normal" font="default">D20001</style></customerid>


I want <customerid>D200001</customerid>

Do I use xmltextreader?
Can you some me an exmaple to read a file and save it as xml?

 input = Regex.Replace(input, "<style>(.|\n)*?</style>", string.Empty);
0
Comment
Question by:dkim18
[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
  • 6
  • 4
10 Comments
 

Author Comment

by:dkim18
ID: 37711393
What I really want to do this after removing <style> tags are read the xmle file and put the value in List<string>

1) read xml file
2) remove <style> tags
3) read nodes and save them in array/list<string>
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 37711515
assume your xml looks something like this:

<customers>
<customerid><style face="normal" font="default">D20001</style></customerid>
<customerid><style face="normal" font="default">D20002</style></customerid>
.
.
</customers>

var list = new List<string>();
var xml  =XElement.Load("<xml_file_path");
var elements = xml.XPathSelectElements("customerid");
list = elements.Select(n=>n.Value).ToList();

Open in new window

0
 
LVL 42

Expert Comment

by:sedgwick
ID: 37711520
to use the code u need to add the following namespaces:
System.Linq
System.Xml.Xpath
0
Cloud Training Guides

FREE GUIDES: In-depth and hand-crafted Linux, AWS, OpenStack, DevOps, Azure, and Cloud training guides created by Linux Academy instructors and the community.

 

Author Comment

by:dkim18
ID: 37711537
what happends to the<style> tag?

How do I read it  and apply the regex to remove the <style>?

I am able to read it as text, apply regex and save it.
Then read it as xml.

Wondering if I can do this by reading it as xml.
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 37711600
you dont need to apply regex or remove the <style> tag to get the value inside.
i made a mistake in the code, here's updated one:

var list = new List<string>();
var xml  =XElement.Load("<xml_file_path");
var elements = xml.XPathSelectElements("customerid/style");
list = elements.Select(n=>n.Value).ToList();

Open in new window

0
 
LVL 42

Accepted Solution

by:
sedgwick earned 500 total points
ID: 37711609
the xml is valid even with the <style> tags, so all you gotta do is read it into XElement object and use xpath to extract the required values.
0
 

Author Comment

by:dkim18
ID: 37711653
You are right. Don't have the remove it.

Let me try the Linq.
0
 

Author Comment

by:dkim18
ID: 37714226
one more question.
How do I loop through each record (customer)?
I want to read each customer and put it in the list<string>

<customers>
<customer>
<customerid><style face="normal" font="default">D20001</style></customerid>
<address></address>
<phones>
<phone>34343</phone>
<phone>34434</phone>
</phones>
<emails>
<email>dsdsw</email>
<email>wewe</email>
</emails>
</customer>
<customer>
<customerid><style face="normal" font="default">D20002</style></customerid>
<address></address>
<phones>
<phone>122</phone>
<phone>124</phone>
<phone>12121</phone>
</phones>
<emails>
<email>dfdfdf</email>
<email>dfdf</email>
<email>dfdfd</email>
<email>dfdfd</email>
</emails>
</customer>.
</customers>
0
 

Author Comment

by:dkim18
ID: 37714797
I get all the customer records but when I cycle through each customer record, I am getting the same first record value. I am thinking this is incorrect:

  XmlNode recNum = element.SelectSingleNode("//customers/customerid/style");      



System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
               xmlDoc.Load(fileName);
               XmlNodeList elements = xmlDoc.SelectNodes("//customers/customer");
               int nCount =  elements.Count;
                Debug.WriteLine(nCount);
       
       
               foreach (XmlElement element in elements)  <=== I get all the records
               {
                   Debug.WriteLine(element.InnerText);
                 
                   XmlNode recNum = element.SelectSingleNode("//customers/customerid/style");               <== but I get the same first record value here
                   string strRecNum = recNum.InnerText;                        
                             
          XmlNode email = element.SelectSingleNode("//customers/email");
                   string strEmail = email.Attributes["name"].Value;  <== but I get the same first record value here

           
               }
0
 

Author Comment

by:dkim18
ID: 37715856
Got it working.

foreach (XmlNode element in elements)
                   
               {
                   Debug.WriteLine(element.InnerText);
                 
                   XmlNode recNum = element.SelectSingleNode("customerid/style");
                                 XmlNode email = element.SelectSingleNode("email");
               
               }
0

Featured Post

Learn by Doing. Anytime. Anywhere.

Do you like to learn by doing?
Our labs and exercises give you the chance to do just that: Learn by performing actions on real environments.

Hands-on, scenario-based labs give you experience on real environments provided by us so you don't have to worry about breaking anything.

Question has a verified solution.

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

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …

623 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