XML-Datei parsen oder bestimmte Daten auflisten
-
Ok, ich brings mir wieder mal selbst bei.
Aus diesem Grund habe ich auch noch nicht viele Beiträge. Würde ich jedem Fragestellenden Google empfehlen oder ihm sagen die gleiche Frage gabs schonmal, hätte ich auch 1k Posts...
Ich glaube meine Fragen waren:
Was ich jetzt gerne wissen würde ist:
Wie kann ich bestimmte Bereiche aus einer XML Datei suchen bzw. welche Möglichkeiten gibts hier in C++?
und
How to parse?
-
Würde ich jedem Fragestellenden Google empfehlen oder ihm sagen die gleiche Frage gabs schonmal, hätte ich auch 1k Posts...
Wenn es dem Fragestellendem hilft?
Wie kann ich bestimmte Bereiche aus einer XML Datei suchen bzw. welche Möglichkeiten gibts hier in C++?
und
How to parse?
beziehen sich auf dasselbe. Wie dem auch sei, es gibt wohl eine vielfalt an Möglichkeiten, wie man eine Datei parset. Da die XML-Datei ASCII-Codiert ist, kannst du die Operation einfach mit einem stream (std::ifstream) durchführen. Um genauer auf "How to parse?" einzugehen:
-Hole dir per std::ifstream jede Zeile in einen string
-Überprüfe die ersten Elemente auf bestimmte keywords (zb. <VEC3>)
-Hole dir die nächsten Daten
Das war's schon fast. Die Daten die du meistens brauchst, sind Zahlen oder Fließkommawerte, die kannst du bei einem std::string einfach mit ::atof( ) <- float und ::atoi( ) <- integer kovertieren.Wenn du es noch ausführlicher haben möchtest, such dir am Besten einen, der es dir gleich programmiert. Außerdem sagte ich bereits: Benutze die Suchmaschine!
-
Die Fage hast du dir doch schon selber beantwortet:
C++ -> Xerces -> http://xerces.apache.org/xerces-c/Wenn du damit zurecht kommst, kannst du auch an diese Sache denken:
http://xqilla.sourceforge.net/HomePageWenn die Anwendung Schwierigkeiten bereitet, gibt schöne Beispiele in dem Source-Zip zu Xerces. Ansonsten stell deine Frage konkreter. Nach der bisherigen Diskussion wirkt ein "How to parse" wie "Kann mir bitte einer hier ein funktionierendes Beispiel reinstellen, wie ich meine XML-Datei parsen kann". Und sowas wirst du nicht sehen. Da solltest du eigenen Ehrgeiz zeigen und es mal versuchen...
-
Eigenhändig XML zu parsen ist wohl wirklich unnötig, dafür gibt's erprobte Bibliotheken. Je nach deinen Anforderungen reicht TinyXML, das kann halt kein DTD und kein XSL, ist aber ziemlich leichtgewichtig. Xerces ist fetter, kann aber auch mehr. Beide stehen unter lässigen Lizenzen.
-
Kóyaánasqatsi schrieb:
Da die XML-Datei ASCII-Codiert ist, ...
Nö, per Default sind die UTF-8, wenn du es nicht anders angibst... Am besten ein Lib verwenden, die gleich damit umgehen kann (->Xerces)
-
Eigenhändig XML zu parsen ist wohl wirklich unnötig, ...
Ne extra lib für eine XML-Datei? Jedes mal die lib linken und sie durchlaufen lassen? Da ist es performancelastiger mit einer lib zu arbeiten, anstatt es eben selber zu parsen. Und bei diesem Format, ist das wirklich simpel.
EDIT:
Keine Ahnung von XML.
-
Ich danke für die regen Beiträge!
Ok...
Ich wollte jetzt die WoW Arsenal items auslesen und mir in eine neue Datei schreiben lassen.
Ich arbeite nun mit der XmlReader Klasse.
String ^charaktername = Convert::ToString(textBox1->Text); String ^servername = Convert::ToString(textBox2->Text); //in einer Zeile... String ^url = "http://eu.wowarmory.com/charactersheet.xml?r=" + servername + "&n=" + charaktername; XmlReaderSettings ^settings = gcnew XmlReaderSettings; settings->ProhibitDtd=false; XmlReader ^wowXml = XmlReader::Create(url,settings); while (wowXml->Read()) listBox1->Items->Add(wowXml->Value); wowXml->Close();Unbehandelte Ausnahme:
"Das erwartete DTD Markup wurde nicht gefunden!"Hm... Jetzt weis ich nicht mehr weiter!
-
Weis hier keiner weiter?
WoW Arsenal mit C++ XmlReader auslesen und bestimmte Items anzeigen...?
-
Das ist doch nicht C++...
Die Syntax kenn ich nicht, muss irgend was WIndows-Zeugsiges sein. ->falsches Forum.
Und XmlReader - wo genau kommt die Klasse her? Gibts da keine ordentliche Doku dafür?
-
XmlReader ist eine Klasse aus dem .NET Framework. Die obengezeigte Syntax ist C++/CLI. Also falsches Forum.
SimonEdit:
Benutze doch die .NET DOM Impl. (XmlDocument, XmlNode, etc.)
-
Alles klar, werde ich mal testen.
Ja, dass Forum ist für CLI das falsche, aber mir ist es auch egal in welcher Form ich auf das File zugreife, Hauptsache ich erhalte das gewünschte Resultat:
- Auslesen der WoW Arsenal items.
Ansonsten bitte ich das Thema in den .NET/CLI Bereich zu verschieben!(Danke)
-
Kannst du mal nen Link zu so nem XML-File posten? WoW Arsenal XML liefert keine brauchbaren Ergebnisse, nur ne Beschwerde, dass die Homepage per XML+XSL-Transformationen dargestellt wird und das den Highspeed-DSL'ern (zu denen ich nicht gehöre) zu langsam ist...
-
Habs jetzt raus!
Vielen Dank für eure Vorschläge!
-
Kóyaánasqatsi schrieb:
Eigenhändig XML zu parsen ist wohl wirklich unnötig, ...
Ne extra lib für eine XML-Datei? Jedes mal die lib linken und sie durchlaufen lassen? Da ist es performancelastiger mit einer lib zu arbeiten, anstatt es eben selber zu parsen.
Verstehe ich nicht, wieso soll es generell performancelastiger sein? Parsen musst du so oder so und der Code dafür ist dann sowieso in der Executable. Man könnte zwar ein wenig Performance sparen, wenn man das Parsen der Attribute oder bestimmter Kind-Elemente überspringt, aber inwiefern sich der Aufwand dafür lohnt ist fraglich, wenn die XML-Datei nur ein paar KB groß ist und sie vorher aus dem Netz geladen wird.
-
Kóyaánasqatsi schrieb:
Eigenhändig XML zu parsen ist wohl wirklich unnötig, ...
Ne extra lib für eine XML-Datei? Jedes mal die lib linken und sie durchlaufen lassen? Da ist es performancelastiger mit einer lib zu arbeiten, anstatt es eben selber zu parsen. Und bei diesem Format, ist das wirklich simpel.
EDIT:
Keine Ahnung von XML.Man merkt, dass du keine Ahnung von XML hast. Bei einem Parser der mal so locker flockig den XML Standard abdecken soll, hat man ganz andere Probleme als "Performance". (und wenn ich es mal vergleiche: Die Kosten, eine komplette, mehrere MB große XML Datei zu parsen gegen das Linken einer library beim start...ganz ehrlich...)
-
-
Hab mittlerweile geschaft was ich wollte...
Wer Interesse an einem WoW Arsenal/Armory Parser hat, den er selbst in C++ coden kann wird schon bald Lösungsvorschläge auf http://www.hyperfull-cybernights.com finden...
Möchte man dann z.B. nur seine Stats oder alle Items anzeigen lassen, geht das wunderbar.
Dabei arbeite ich mit C++ /CLI/.NET. Aber der Code kann leicht in Standart C++ umgewandelt werden.mfg