Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

1

30.10.2011, 23:24

[C#] Größeres XML Dokument einlesen

Hallo,

ich stehe mal wieder vor einem Problem. Ich möchte eine größere Datei im XML-Format einlesen (Beispiel) und eben einige Dinge auslesen. Ich habe das vorher mit Stringverarbeitung gemacht, was in Anbetracht der XML-Klasse in C# natürlich Blödsinn ist.

Meine Frage ist nun, ob es nicht eine Möglichkeit gibt, direkt einzelne Attribute "anzusprechen", beispielsweise <Value></Value>. Es ginge ja irgendwie mit

C#-Quelltext

1
2
3
while(reader.Read())
{
}


Bin für (allgemeine) Vorschläge offen.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

30.10.2011, 23:35

Guck dir mal die XmlDocument-Klasse an.

Damit kannst du dich direkt zu einem Element durchhangel ohne selber vorher durch alles durchgehen zu müssen.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

31.10.2011, 18:07

Für wirklich große Dokumente so im großen MB-Bereich solltest du XmlReader verwenden. Ansonsten verweise ich auch auf XmlDocument :). Damit kannst du auf Objektebene mit den Xml-Knoten umgehen.

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

4

31.10.2011, 19:04

Danke schonmal für die Antworten.

Was mich etwa stört, ist, dass es bei vielen Beispielen im Internet lediglich 2 Verschachtelungen oder so gibt, irgendwie stelle ich mich bei dem Thema XML echt sehr doof an. Ich suche in etwa sowas in der Art:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
XmlTextReader reader = new XmlTextReader(@"D:/Test.tcx"); 
while (reader.Read()) 
{ 
switch (reader.NodeType) 
{ 
case XmlNodeType.Element: 
//In etwa so: 
//if (Element == "<Value>") 
// ...ReadValue(); 
break; 
} 
}


Gibt es also eine Möglichkeit, direkt nur einen bestimmten Knoten anzuspringen, ohne jedes mal mit HasAttributes, HasCHildren und so weiter zu prüfen?

P.S. Sorry, aber jegliche Formatierung wird von der EIngabe hier gefressen...

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

31.10.2011, 19:19

ja: XmlDocument (nach dem, was ich hier bisher gelesen habe)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

6

31.10.2011, 20:02

Habs jetzt mit dem XmlTextReader gelöst:

Dauert zwar immernoch bisschen und Prozessorauslastung ist recht hoch, aber das Dokument ist halt doch relativ groß.

http://paste42.de/2450/

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

7

01.11.2011, 12:42

Ich werfe mal XPath in den Raum...
Und Document.SelectSingleNode() bzw. SelectNodes()... ^^

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

8

01.11.2011, 12:49

Ich werfe mal XPath in den Raum...
Und Document.SelectSingleNode() bzw. SelectNodes()... ^^


Der Link oben zeigt, wie ich es gelöst habe. Ist trotz der Größe instant und macht genau das, was ich wollte.

Hier nochmal der Code für das ganze Dokument:

http://paste42.de/2453/

Danke an alle ;)

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

01.11.2011, 12:51

Nein macht es nicht ;)
Du wolltest einzelne Attribute direkt ansprechen. Das macht dein Code aber nicht.
Aber wenn du mit der Lösung zufrieden bist, dann ist ja alles in Ordnung.

Werbeanzeige