2012-06-27 5 views
5

Ich habe folgende XML-Datei, ich will besten Weg, wissen, diese XML-DateiWie lese ich XML-Datei in C#?

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

Als Ausgabe i Sammlung von Werten wie „123456789“ müssen lesen oder es könnte Array von string []

seine

Können wir Linq zu XML verwenden? Wie?

+2

Ja verwenden Linq. Es gibt 10000000+ Tutorials über Linq. Vielleicht könnten Sie damit beginnen: http://www.codeproject.com/Articles/19154/Understanding-LINQ-C – sabisabi

+0

mögliche Duplikate von [LINQ zum Lesen von XML] (http://stackoverflow.com/questions/670563/linq -to-read-xml) –

Antwort

3
var [email protected]"<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); 
+0

OP möchte ein Array von String –

+0

@ChuckSavage Vorsichtig lesen ... sie waren nicht explizit über diese Anforderung. Sammlung von * Werten * oder String-Array. Ich erfülle diese Anforderung durch die Regeln der booleschen Logik. Es würde kein Genie brauchen, diese Antwort zu unterlaufen, um Streicher statt Ints zu erzeugen. Lohnt sich kaum einen Downvote ... – spender

+0

OP angefordert "..." oder string []. Wenn Sie die Abstimmung zurück wollen, kann ich den Downvote nicht ändern, bis die Antwort bearbeitet wurde. Sie und ich wissen beide, es braucht nur ein '.ToArray()' am Ende Ihrer Anweisung, um es zu einem Array zu machen, aber genau das hat das OP angefordert. Wie es ist, ist Ihre Antwort ein "IEnumerable ", das nicht dasselbe wie ein 'string []' ist. –

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

Dies wird Ihnen ein string[] geben.

6

Verwenden von LINQ to XML, Fügen 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); 

Ausgabe wäre:

123.456.789

+1

Sie können einfach '.Descendants (" Firma ")' anstelle von '.Descendants (" Firmen ") verwenden. Elemente (" Firma ")' –

+1

@ChuckSavage, wollte ich nur eine Idee geben, und die obige Aussage funktioniert auch wo wollen Sie verschachtelte Unternehmen Element zu vermeiden, so dass: Kind Unternehmen Habib

+0

Yep - ich in einem kritischen Ort war gestern - sorry dafür. –

4

In Datensatz, den Sie von XML-Datei

Im Folgenden sind Zeilen lesen Code zum Lesen der XML-Datei 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 
+0

+1 OP möchte eine Linq Antwort, aber nettes Beispiel sowieso –

2

In der Vergangenheit habe ich eine XmlReader verwendet und hatte keine Schwierigkeiten.

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

Es ist sehr einfach und die Dokumentation ist sehr gut geschrieben. Eine schnelle Demonstration, wie man es benutzt:

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; 
    } 
} 
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); 
}