Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 248
  • Last Modified:

reading xml file using c#?

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
dkim18
Asked:
dkim18
  • 6
  • 4
1 Solution
 
dkim18Author Commented:
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
 
Meir RivkinFull stack Software EngineerCommented:
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
 
Meir RivkinFull stack Software EngineerCommented:
to use the code u need to add the following namespaces:
System.Linq
System.Xml.Xpath
0
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

 
dkim18Author Commented:
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
 
Meir RivkinFull stack Software EngineerCommented:
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
 
Meir RivkinFull stack Software EngineerCommented:
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
 
dkim18Author Commented:
You are right. Don't have the remove it.

Let me try the Linq.
0
 
dkim18Author Commented:
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
 
dkim18Author Commented:
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
 
dkim18Author Commented:
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

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now