Laden...

C# Bestimmte Wörter aus bestehender xml Datei auslesen

Erstellt von krambambuli vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.204 Views
K
krambambuli Themenstarter:in
5 Beiträge seit 2014
vor 9 Jahren
C# Bestimmte Wörter aus bestehender xml Datei auslesen

Hallo!
Also ich habe eine bestehende, ziemlich große, .xml Datei, auf welchen Inhalt ich keinen Einfluss habe.
Aus dieser Datei möchte ich nur einige bestimmte Wörter auslesen und weiterverarbeiten.
Ich habe ein kleines Programm geschrieben. Die ersten Zeilen funktionieren problemlos, doch dann kommt der Fehler: "Es sind mehrere Stammelemente vorhanden..."
In diesem Fall liegt das wohl am doppelten "String". Wie kann ich die Datei dennoch auslesen?


...
   XmlReader reader;
            reader = XmlReader.Create(@"D:\User\Testprogramme\TIA\System\TIA-Export2.xml");
            List<Gegenstand> liste = new List<Gegenstand>();
            Gegenstand Teil = null;
           
         while (reader.Read()) {
         // prüfen, ob es sich aktuell um ein Element handelt
         if (reader.NodeType == (XmlNodeType.Element)) {
         // alle relevanten Elemente untersuchen
       
             switch(reader.Name) {
             case "array":
             // neue Person erzeugen und in Liste eintragen
            Teil = new Gegenstand();
            liste.Add(Teil);
            break;
           
             case "string":
                Teil.name = reader.ReadString();  
             break;
...
 

Auszug aus .xml Datei:


<?xml version="1.0" encoding="utf-8" ?>
...
                    <array id="2113564">
                <System.Array.Int32>
                </System.Array.Int32>
              </array>
              <string>schalter2</string>
              <uint32>2</uint32>
              <int32>1</int32>
...

Versucht hatte ich dasselbe auch schon mit XmlDocument. Damit kommt jedoch der selbe Fehler.
Der Code:


            XmlDocument document = new XmlDocument(); 
            document.Load(@"D:\User\Testprogramme\TIA\System\TIA-Export2.xml"); 
            XmlNodeList nodes = document.GetElementsByTagName("(gesuchtesWort)"); 
  
            // für alle Nodes in der Liste 
            { 
                foreach (XmlNode node in nodes) 
                { 
                    XmlElement element = (XmlElement)node; 
                    string s = element.InnerText; 
                } 
            } 

Dann habe ich eine Möglichkeit gefunden den Code wohl anzupassen um den dann auszulesen. Jedoch kann ich dann debuggen, aber nichts mehr auslesen. Versucht hatte ich das damit:


XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);

1.346 Beiträge seit 2008
vor 9 Jahren

Hallo krambambuli,

Warum die Fehlermeldung auftritt dürfte klar sein. Das Xml Dokument ist nicht Standardkonform, da ein Xml Dokument immer nur ein Root Element haben darf. Da das Dokument ja, wie du geschrieben hast groß ist würde ich vielleicht versuchen einen eigenen TextReader zu schreiben, der das Xml Dokument beim einlesen repariert und ein Dummy Root Element einfügt, und ansonsten die Daten einfach durchreicht.

Du hast ja irgendwie sowas

<?xml version="1.0" encoding="utf-8" ?>
<foo1>
...
</foo>
<foo2>
...
</foo2>
...

Dann kannst du das so reparieren:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <foo1>
    ...
    </foo>
    <foo2>
    ...
    </foo2>
    ...
</root>

Lieben Gruß,

pdelvo