2012-06-27 22 views
5

Ho seguente file XML, voglio sapere il modo migliore per leggere questo file XMLCome leggere il file XML in C#?

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

Come uscita ho bisogno insieme di valori come "123.456.789" o potrebbe essere serie di string []

Possiamo usare Linq per xml? Come?

+2

Sì utilizzare LINQ. Ci sono oltre 10000000 tutorial su Linq. Forse potresti iniziare con questo: http://www.codeproject.com/Articles/19154/Understanding-LINQ-C – sabisabi

+0

possibile duplicato di [LINQ per leggere XML] (http://stackoverflow.com/questions/670563/linq -to-read-xml) –

risposta

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 desidera un array di stringhe –

+0

@ChuckSavage Leggi attentamente ... non erano in realtà espliciti su tale requisito. Raccolta di * valori * o array di stringhe. Adempo questo requisito secondo le regole della logica booleana. Non ci vorrebbe un genio per sovvertire questa risposta per produrre stringhe invece di intarsi. Difficilmente vale un downvote ... – spender

+0

OP richiesto "..." o stringa []. Se vuoi il voto di ritorno, non posso cambiare il downvote fino a quando la risposta non è stata modificata. Sappiamo entrambi, basta un '.ToArray()' alla fine dell'istruzione per renderlo un array, ma questo è ciò che l'OP ha richiesto. Come è, la tua risposta è un 'IEnumerable ' che non è lo stesso di 'stringa []'. –

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

Questo vi darà un string[].

6

Utilizzare LINQ to XML, Includi 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); 

uscita sarebbe:

123.456.789

+1

Puoi usare '.Descendants (" Company ")' invece di '.Descendants (" Companies "). Elements (" Company ")' –

+1

@ChuckSavage, volevo solo dare un'idea, e la dichiarazione sopra funziona anche dove si vuole evitare nidificato elemento aziendale in modo tale che: azienda bambino Habib

+0

Yep - ero in un posto critica di ieri - mi dispiace per questo. –

4

nel set di dati è possibile leggere file xml

seguito sono le linee di codice per leggere il file XML 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 vuole una risposta Linq, ma un buon esempio comunque –

2

In passato, ho utilizzato uno XmlReader e non ho avuto difficoltà.

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

E 'molto semplice e la documentazione è piuttosto ben scritto. Una rapida dimostrazione di come usarlo:

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