2 Stimmen

feststellen, ob xml datei daten enthält - c#

Woher weiß ich, ob meine XML-Datei neben der Namensrauminformation noch weitere Daten enthält?

Einige der Dateien enthalten dies:

<?xml version="1.0" encoding="UTF-8"?>

Und wenn ich auf eine solche Datei stoße, möchte ich die Datei in einem Fehlerverzeichnis ablegen

4voto

Francis B. Punkte 6776

Sie könnten den XmlReader verwenden, um den Overhead von XmlDocument zu vermeiden. In Ihrem Fall erhalten Sie eine Ausnahme, weil das Root-Element fehlt.

string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
using (StringReader strReader = new StringReader(xml))
{
    //You can replace the StringReader object with the path of your xml file.
    //In that case, do not forget to remove the "using" lines above.
    using (XmlReader reader = XmlReader.Create(strReader))
    {
        try
        {
            while (reader.Read())
            {
            }
        }
        catch (XmlException ex)
        {
            //Catch xml exception
            //in your case: root element is missing
        }
    }
}

Sie können eine Bedingung in die while(reader.Read())-Schleife einfügen, nachdem Sie die ersten Knoten geprüft haben, um zu vermeiden, dass Sie die gesamte XML-Datei lesen müssen, da Sie nur prüfen wollen, ob das Root-Element fehlt.

2voto

Dan Diplo Punkte 24765

Ich denke, die einzige Möglichkeit ist, eine Ausnahme abzufangen, wenn Sie versuchen, es zu laden, etwa so:

   try
    {
        System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
        doc.Load(Server.MapPath("XMLFile.xml"));
    }
    catch (System.Xml.XmlException xmlEx)
    {
        if (xmlEx.Message.Contains("Root element is missing"))
        {
            // Xml file is empty
        }
    }

Ja, es entsteht ein gewisser Overhead, aber Sie sollten solche Überprüfungen ohnehin durchführen. Man sollte Eingaben nie vertrauen und die einzige Möglichkeit, zuverlässig zu überprüfen, ob es sich um XML handelt, ist, sie wie XML zu behandeln und zu sehen, was .NET dazu sagt!

2voto

XmlDocument xDoc = new XmlDocument();

if (xDoc.ChildNodes.Count == 0) { // xml-Dokument ist leer }

if (xDoc.ChildNodes.Count == 1) { // im Xml-Dokument gibt es nur einen Deklarationsknoten. (wenn Sie sicher sind, dass die Deklaration immer am Anfang steht }

if (xDoc.ChildNodes.Count > 1) { // es gibt Deklaration + n Knoten (normalerweise ist diese Anzahl 2; Deklaration + Wurzelknoten) }

1voto

P.K Punkte 17959

Ich habe das noch nicht ausprobiert, aber es sollte funktionieren.

try
{
    XmlDocument doc = new XmlDocument();
    doc.Load("test.xml");
}
catch (XmlException exc)
{
    //invalid file
}

EDIT: Aufgrund von Kommentaren

Für große XML-Dokumente siehe Thomas Antwort. Dieser Ansatz kann zu Leistungsproblemen führen. Wenn es sich jedoch um eine gültige XML-Datei handelt und das Programm sie verarbeiten will, scheint dieser Ansatz besser zu sein.

0voto

Thomas Owens Punkte 110966

Wenn Sie sich keine Sorgen um die Gültigkeit machen, prüfen Sie einfach, ob nach dem ersten ?> etwas steht. Ich bin mir mit der C#-Syntax nicht ganz sicher (es ist zu lange her, seit ich sie benutzt habe), aber lesen Sie die Datei, suchen Sie nach dem ersten ?> und sehen Sie nach, ob nach diesem Index etwas kommt.

Wenn Sie das XML jedoch später verwenden oder weiterverarbeiten wollen, sollten Sie Folgendes in Betracht ziehen PKs Antwort und laden Sie das XML in eine XmlDocument Objekt. Aber wenn Sie große XML-Dokumente haben, die Sie nicht verarbeiten müssen, dann könnte eine Lösung wie die meine, die die Datei als Text liest, weniger Aufwand bedeuten.

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