Comment lire et parsingr un fichier XML en C #?

Comment lire et parsingr un fichier XML en C #?

XmlDocument pour lire un XML à partir d’une chaîne ou d’un fichier.

XmlDocument doc = new XmlDocument(); doc.Load("c:\\temp.xml"); 

ou

 doc.LoadXml("something"); 

puis trouver un nœud en dessous c’est à dire comme ça

 XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title"); 

ou

 foreach(XmlNode node in doc.DocumentElement.ChildNodes){ ssortingng text = node.InnerText; //or loop through its children as well } 

puis lisez le texte à l’intérieur de ce nœud comme ceci

 ssortingng text = node.InnerText; 

ou lire un atsortingbut

 ssortingng attr = node.Atsortingbutes["theatsortingbutename"]?.InnerText 

Toujours vérifier la valeur null sur Atsortingbutes [“quelquechose”] car il sera nul si l’atsortingbut n’existe pas.

LINQ to XML Exemple:

 // Loading from a file, you can also load from a stream var xml = XDocument.Load(@"C:\contacts.xml"); // Query the data and write out a subset of contacts var query = from c in xml.Root.Descendants("contact") where (int)c.Atsortingbute("id") < 4 select c.Element("firstName").Value + " " + c.Element("lastName").Value; foreach (string name in query) { Console.WriteLine("Contact's Full Name: {0}", name); } 

Référence : LINQ to XML sur MSDN

Voici une application que j’ai écrite pour lire des sitemaps au format XML:

 using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; using System.Xml; namespace SiteMapReader { class Program { static void Main(ssortingng[] args) { Console.WriteLine("Please Enter the Location of the file"); // get the location we want to get the sitemaps from ssortingng dirLoc = Console.ReadLine(); // get all the sitemaps ssortingng[] sitemaps = Directory.GetFiles(dirLoc); StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true); // loop through each file foreach (ssortingng sitemap in sitemaps) { try { // new xdoc instance XmlDocument xDoc = new XmlDocument(); //load up the xml from the location xDoc.Load(sitemap); // cycle through each child noed foreach (XmlNode node in xDoc.DocumentElement.ChildNodes) { // first node is the url ... have to go to nexted loc node foreach (XmlNode locNode in node) { // thereare a couple child nodes here so only take data from node named loc if (locNode.Name == "loc") { // get the content of the loc node ssortingng loc = locNode.InnerText; // write it to the console so you can see its working Console.WriteLine(loc + Environment.NewLine); // write it to the file sw.Write(loc + Environment.NewLine); } } } } catch { } } Console.WriteLine("All Done :-)"); Console.ReadLine(); } static void readSitemap() { } } } 

Code sur Coller Bin http://pastebin.com/yK7cSNeY

Il y a beaucoup de chemin, certains:

  • XmlSerializer. utilisez une classe avec le schéma cible que vous voulez lire – utilisez XmlSerializer pour obtenir les données dans un fichier XML chargé dans une instance de la classe.
  • Linq 2 xml
  • XmlTextReader.
  • XmlDocument
  • XPathDocument (access en lecture seule)

Linq to XML.

En outre, VB.NET offre une meilleure prise en charge de l’parsing syntaxique via le compilateur que C #. Si vous avez le choix et le désir, jetez-y un coup d’œil.

Tu peux soit:

  • Utilisez la classe XmlSerializer
  • Utiliser la classe XmlDocument

Des exemples sont sur les pages msdn fournies

Découvrez la classe XmlTextReader par exemple.

Vous pouvez utiliser un DataSet pour lire des chaînes XML.

 var xmlSsortingng = File.ReadAllText(FILE_PATH); var ssortingngReader = new SsortingngReader(xmlSsortingng); var dsSet = new DataSet(); dsSet.ReadXml(ssortingngReader); 

Afficher cela pour des informations.

  public void ReadXmlFile() { ssortingng path = HttpContext.Current.Server.MapPath("~/App_Data"); // Finds the location of App_Data on server. XmlTextReader reader = new XmlTextReader(System.IO.Path.Combine(path, "XMLFile7.xml")); //Combines the location of App_Data and the file name while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: break; case XmlNodeType.Text: columnNames.Add(reader.Value); break; case XmlNodeType.EndElement: break; } } } 

Vous pouvez éviter la première instruction et spécifier simplement le nom du chemin dans le constructeur de XmlTextReader.

Il y a différentes manières, selon l’endroit où vous voulez obtenir. XmlDocument est plus léger que XDocument, mais si vous souhaitez vérifier de manière minimaliste qu’une chaîne contient du code XML, l’expression régulière est probablement le choix le plus rapide et le plus léger que vous puissiez faire. Par exemple, j’ai implémenté des tests de fumée avec SpecFlow pour mon API et je souhaite tester si l’un des résultats de tout code XML valide – alors j’utiliserais une expression régulière. Mais si je dois extraire des valeurs de ce XML, alors je l’parsingrais avec XDocument pour le faire plus rapidement et avec moins de code. Ou bien j’utiliserais XmlDocument si je devais travailler avec un gros XML (et parfois je travaille avec des XML autour de 1M de lignes, voire plus); alors je pourrais même le lire ligne par ligne. Pourquoi? Essayez d’ouvrir plus de 800 Mo dans des octets privés dans Visual Studio; même en production, vous ne devriez pas avoir d’objects plus gros que 2 Go. Vous pouvez avec un twerk, mais vous ne devriez pas. Si vous deviez parsingr un document contenant BEAUCOUP de lignes, alors ce document serait probablement CSV.

J’ai écrit ce commentaire, car je vois de nombreux exemples avec XDocument. XDocument n’est pas adapté aux gros documents ou lorsque vous souhaitez uniquement vérifier si le contenu est XML valide. Si vous souhaitez vérifier si le XML lui-même a un sens, vous avez besoin d’un schéma.

J’ai également refusé la réponse proposée, car j’estime qu’elle nécessite les informations ci-dessus. Imaginez que je veuille vérifier si 200M de XML, 10 fois par heure, sont des XML valides. XDocument gaspillera un peu de ressources.

prasanna venkatesh indique également que vous pouvez essayer de remplir la chaîne d’un jeu de données, cela indiquera également un code XML valide.