5

I have following XML file, i want to know best way to read this XML file

<MyFile> <Companies> <Company>123</Company> <Company>456</Company> <Company>789</Company> </Companies> </MyFile> 

As an output i need collection of values like "123,456,789" or it could be array of string[]

Can we use Linq to xml? How?

2

6 Answers 6

11
var xdoc = XDocument.Load(PATH_TO_FILE); var companies = xdoc.Descendants("Company").Select(c => (string)c).ToArray(); 

This will give you a string[].

Sign up to request clarification or add additional context in comments.

Comments

6

Use LINQ to XML, Include using System.Xml.Linq;

 XDocument xmlDoc = XDocument.Load("yourfile.xml"); var test = xmlDoc.Descendants("Companies").Elements("Company").Select(r => r.Value).ToArray(); string result = string.Join(",", test); 

Output would be:

123,456,789

3 Comments

You can just use .Descendants("Company") instead of .Descendants("Companies").Elements("Company")
@ChuckSavage, I just wanted to give an idea, and the above statement also works where you want to avoid nested company element such that: <Company>123</Company> <otherinfo> <Company>child company</Company> </otherinfo>
Yep - I was in a critical place yesterday - sorry for that.
4

In dataset you can read xml file

Following are lines of code to read XML file in DataSet

DataSet dsMenu = new DataSet(); //Create Dataset Object dsMenu.ReadXml("XMLFILENAME.XML"); // Read XML file in Dataset DataTable dtXMLFILE// Create DatyaTable object dtXMLFILE= dsMenu.Tables[0]; // Store XML Data in Data Table 

Comments

3
var xmlStr=@"<MyFile> <Companies> <Company>123</Company> <Company>456</Company> <Company>789</Company> </Companies> </MyFile>"; var xDoc = XDocument.Parse(xmlStr); var companyIds = xDoc.Descendants("Company").Select(e => (int)e); 

2 Comments

@ChuckSavage Read carefully... they weren't actually explicit about that requirement. Collection of values or string array. I fulfil that requirement by the rules of boolean logic. It wouldn't take a genius to subvert this answer to produce strings instead of ints. Hardly worth a downvote...
OP requested "..." or string[]. If you want the vote back, I can't change the downvote until the answer has been edited. You and I both know, it just takes a .ToArray() on the end of your statement to make it an array, but that is what the OP requested. As is, your answer is an IEnumerable<int> which isn't the same as a string[].
3
string pathToXmlFile = @"C:\test.xml"; XElement patternDoc = XElement.Load(pathToXmlFile); List<string> values = new List<string>(); foreach (var element in patternDoc.Elements("Companies").Elements("Company")) { values.Add(element.Value); } 

Comments

2

In the past, I have used an XmlReader and had no difficulties.

MSDN Documentation: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx

It is very straightforward and the documentation is pretty well written. A quick demonstration of how to use it:

XmlReader reader = XmlReader.Create(targetFile); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name.Equals("Company") { // Read the XML Node's attributes and add to string } break; } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.