2012-06-27 46 views
5

He siguiente archivo XML, quiero saber mejor manera de leer este archivo XML¿Cómo leer el archivo XML en C#?

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

como una salida necesito colección de valores como "123456789" o podría ser array de cadenas []

¿Podemos usar Linq para xml? ¿Cómo?

+2

Sí utilizar LINQ. Hay más de 10000000 tutoriales sobre Linq. Tal vez podría comenzar con esto: http://www.codeproject.com/Articles/19154/Understanding-LINQ-C – sabisabi

+0

posible duplicado de [LINQ para leer XML] (http://stackoverflow.com/questions/670563/linq -to-read-xml) –

Respuesta

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 quiere una matriz de cadena –

+0

@ChuckSavage Lea atentamente ... en realidad no fueron explícitos sobre ese requisito. Colección de * valores * o conjunto de cadenas. Cumplo ese requisito con las reglas de la lógica booleana. No se necesitaría un genio para subvertir esta respuesta para producir cadenas en lugar de enteros. Apenas vale la pena un voto negativo ... – spender

+0

OP solicitó "..." o una cadena []. Si quieres que te devuelvan el voto, no puedo cambiar el downvote hasta que la respuesta haya sido editada. Usted y yo sabemos que solo se necesita '.ToArray()' al final de su extracto para que sea un conjunto, pero eso es lo que solicitó el OP. Como es, tu respuesta es un 'IEnumerable ' que no es lo mismo que 'string []'. –

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

Esto le dará una string[].

6

uso de LINQ para XML, Incluir 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); 

salida sería:

123.456.789

+1

Puede simplemente usar '.Descendants (" Compañía ")' en lugar de '.Descendants (" Compañías "). Elementos (" Compañía ")' –

+1

@ChuckSavage, solo quería dar una idea, y la declaración anterior también funciona donde se quiere evitar o varios elementos anidados empresa de tal manera que: empresa niño Habib

+0

Sí - yo estaba en un lugar crítico ayer - lo siento por eso. –

4

En conjunto de datos se puede leer el archivo XML

A continuación se presentan las líneas de código para leer el archivo XML en el 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 quiere una respuesta Linq, pero buen ejemplo de todos modos –

2

En el pasado, he usado un XmlReader y no tuve dificultades.

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

Es muy sencillo y la documentación está muy bien escrito. Una rápida demostración de cómo 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); 
}