Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# Bestimmte Wörter aus bestehender xml Datei auslesen
krambambuli
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Norddeutschland

Themenstarter:

C# Bestimmte Wörter aus bestehender xml Datei auslesen

beantworten | zitieren | melden

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);
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pdelvo am .
private Nachricht | Beiträge des Benutzers