469 Stimmen

Wie lese und parse ich eine XML-Datei in C#?

Wie lese und parse ich eine XML-Datei in C#?

612voto

Wolf5 Punkte 15450

XmlDocument, um ein XML aus einem String oder einer Datei zu lesen.

using System.Xml;

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

o

doc.LoadXml("<xml>something</xml>");

und dann einen Knoten darunter suchen, z. B. so

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

o

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

und lesen Sie dann den Text innerhalb dieses Knotens wie folgt

string text = node.InnerText;

oder ein Attribut lesen

string attr = node.Attributes["theattributename"]?.InnerText

Prüfen Sie bei Attribute["etwas"] immer auf null, da es null ist, wenn das Attribut nicht existiert.

257voto

Konstantin Tarkus Punkte 36184

LINQ zu XML

// 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.Attribute("id") < 4
            select c.Element("firstName").Value + " " +
                   c.Element("lastName").Value;

foreach (string name in query)
{
    Console.WriteLine("Contact's Full Name: {0}", name);
}

Referenz : LINQ zu XML bei MSDN

23voto

ajzeffer Punkte 840

Hier ist eine Anwendung, die ich zum Lesen von XML-Sitemaps geschrieben habe:

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(string[] args)
        {
            Console.WriteLine("Please Enter the Location of the file");

            // get the location we want to get the sitemaps from 
            string dirLoc = Console.ReadLine();

            // get all the sitemaps 
            string[] sitemaps = Directory.GetFiles(dirLoc);
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true);

            // loop through each file 
            foreach (string 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 
                                string 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 auf Paste Bin http://pastebin.com/yK7cSNeY

17voto

eglasius Punkte 35447

Es gibt viele Möglichkeiten, einige:

  • XmlSerializer. Verwenden Sie eine Klasse mit dem Zielschema das Sie lesen wollen - verwenden Sie XmlSerializer um die Daten in einem Xml zu erhalten, das in eine Instanz der Klasse geladen werden.
  • Linq 2 xml
  • XmlTextReader.
  • XmlDocument
  • XPathDocument (schreibgeschützter Zugriff)

13voto

Sie könnten ein DataSet verwenden, um XML-Strings zu lesen.

var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);

Ich schreibe dies nur, um zu informieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X