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

1

04.01.2010, 01:16

XML Parser - welcher?

Hi Leute

In meinem Spiel möchte ich die Mapdateien gerne als XML hinterlegen.
Natürlich möchte ich später auch einen Mapeditor dazu schreiben.

Ich habe schon ein paar angeschaut, bin aber immer noch unschlüssig, welchen Parser ich nehmen soll (C++).
Welche Erfahrungen habt ihr mit welchen Parsern und welche könnt ihr mir Empfehlen. (Am besten nur welche mit Lese- und Schreibfunktionen)

Danke schon mal im Voraus

MikeMatrix
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

04.01.2010, 01:21

ticpp benutze ich auch. Ist recht einfach zu bedienen, klein und schlank. :)
(ticpp ist eine Erweiterung für TinyXML)

Hier
http://www.c-plusplus.de/forum/viewtopic-var-t-is-257604-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html
werden auch nochmal 2 genannt, welche ich selbst noch nicht kannte. Sind sicher auch mal ein Blick Wert.

3

04.01.2010, 01:47

Sieht an sich ja gut aus...
Nur irgendwie bekomm ich mein Testprojekt nicht zum laufen.
VS08's Linker Spuckt folgendes aus:

Quellcode

1
2
3
4
5
6
7
8
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall ticpp::Document::LoadFile(enum TiXmlEncoding)" (?LoadFile@Document@ticpp@@QAEXW4TiXmlEncoding@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ticpp::Document::Document(char const *)" (??0Document@ticpp@@QAE@PBD@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall TiCppRCImp::DecRef(void)" (?DecRef@TiCppRCImp@@QAEXXZ) referenced in function "public: virtual __thiscall ticpp::NodeImp<class TiXmlDocument>::~NodeImp<class TiXmlDocument>(void)" (??1?$NodeImp@VTiXmlDocument@@@ticpp@@UAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ticpp::Exception::Exception(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Exception@ticpp@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall ticpp::Node::IterateFirst(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class ticpp::Attribute * *)const " (?IterateFirst@Node@ticpp@@UBEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAPAVAttribute@2@@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ticpp::Exception::~Exception(void)" (??1Exception@ticpp@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual char const * __thiscall ticpp::Exception::what(void)const " (?what@Exception@ticpp@@UBEPBDXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall TiCppRCImp::IsNull(void)" (?IsNull@TiCppRCImp@@QAE_NXZ) referenced in function "protected: void __thiscall ticpp::Base::ValidatePointer(void)const " (?ValidatePointer@Base@ticpp@@IBEXXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall TiCppRCImp::IncRef(void)" (?IncRef@TiCppRCImp@@QAEXXZ) referenced in function "protected: virtual void __thiscall ticpp::NodeImp<class TiXmlDocument>::operator=(class ticpp::NodeImp<class TiXmlDocument> const &)" (??4?$NodeImp@VTiXmlDocument@@@ticpp@@MAEXABV01@@Z)


Ich frag mich was der da rumlinken will...

EDIT: Natürlich gibts den Sourcecode obendruf:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef TIXML_USE_TICPP
#define TIXML_USE_TICPP
#endif

#include <iostream>
#include "ticpp.h"

using namespace std;

int main()
{
    ticpp::Document doc("test.xml");
    doc.LoadFile();

    cin.sync();
    cin.get();
    return 0;
}
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

4

04.01.2010, 02:16

Kann dir anstatt XML nur YAML empfehlen. Ist leichter zu lesen und zu warten und mit libyaml-cpp kannst du das genau so einfach parsen.

5

04.01.2010, 10:01

@MikeMatrix

Entweder fehlt deinem Programm die nötige lib Datei oder die entsprechenden CPP Dateien von deiner Bibliothek.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

6

04.01.2010, 10:33

Wenn es schneller zu laden sein soll, und die Lesbarkeit nicht im Vordergrund steht, empfehle ich xds, welche im Game Programming Gems 4 vorgestellt wird.
Funktioniert auch mit TinyXML...

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

7

04.01.2010, 14:42

ansich kommt es doch aber bei kleinen programmen nicht auf schnelligkeit an, denke ich...
wenn du dir den schritt, die XML datei umständlich zu lesen, sparen willst, generier dir doch alles:
http://www.codesynthesis.com/products/xsd/

du gibts dem tool nur die XSD (die du eh haben solltest :D) und der generiert dir passende klassen + glue-code

alles, was übrigbleibt, zu tun, ist (pseudocode):
Config c = Config::load("myConfig.xml");

fertig...

8

04.01.2010, 18:10

So hat geklappt.
Ich werd nun ticpp benutzen.
Elegant klein und gut zu benutzen. Thx für den Tipp.


Zitat


ansich kommt es doch aber bei kleinen programmen nicht auf schnelligkeit an, denke ich...
wenn du dir den schritt, die XML datei umständlich zu lesen, sparen willst, generier dir doch alles:
http://www.codesynthesis.com/products/xsd/

du gibts dem tool nur die XSD (die du eh haben solltest :D) und der generiert dir passende klassen + glue-code

alles, was übrigbleibt, zu tun, ist (pseudocode):
Config c = Config::load("myConfig.xml");

fertig...


Interessant werd ich mal irgendwann anschauen.
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

idontknow

unregistriert

9

08.02.2010, 16:01

Zitat von »"MikeMatrix"«

Sieht an sich ja gut aus...
Nur irgendwie bekomm ich mein Testprojekt nicht zum laufen.
VS08's Linker Spuckt folgendes aus:

Quellcode

1
2
3
4
5
6
7
8
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall ticpp::Document::LoadFile(enum TiXmlEncoding)" (?LoadFile@Document@ticpp@@QAEXW4TiXmlEncoding@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ticpp::Document::Document(char const *)" (??0Document@ticpp@@QAE@PBD@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall TiCppRCImp::DecRef(void)" (?DecRef@TiCppRCImp@@QAEXXZ) referenced in function "public: virtual __thiscall ticpp::NodeImp<class TiXmlDocument>::~NodeImp<class TiXmlDocument>(void)" (??1?$NodeImp@VTiXmlDocument@@@ticpp@@UAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ticpp::Exception::Exception(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Exception@ticpp@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall ticpp::Node::IterateFirst(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class ticpp::Attribute * *)const " (?IterateFirst@Node@ticpp@@UBEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAPAVAttribute@2@@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ticpp::Exception::~Exception(void)" (??1Exception@ticpp@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual char const * __thiscall ticpp::Exception::what(void)const " (?what@Exception@ticpp@@UBEPBDXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall TiCppRCImp::IsNull(void)" (?IsNull@TiCppRCImp@@QAE_NXZ) referenced in function "protected: void __thiscall ticpp::Base::ValidatePointer(void)const " (?ValidatePointer@Base@ticpp@@IBEXXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall TiCppRCImp::IncRef(void)" (?IncRef@TiCppRCImp@@QAEXXZ) referenced in function "protected: virtual void __thiscall ticpp::NodeImp<class TiXmlDocument>::operator=(class ticpp::NodeImp<class TiXmlDocument> const &)" (??4?$NodeImp@VTiXmlDocument@@@ticpp@@MAEXABV01@@Z)


Ich frag mich was der da rumlinken will...


Hab genau das selbe problem, bisher aber keine Lößung weiß wer woran das liegt? Source Code ist 1zu1 der selbe wie bei MikeMatrix außer nem std::cin.get() vor dem return was aber nicht relevant sein sollte...

Help pls!

10

08.02.2010, 16:22

Zitat von »"chriss"«

@MikeMatrix

Entweder fehlt deinem Programm die nötige lib Datei oder die entsprechenden CPP Dateien von deiner Bibliothek.


LibLib...

Werbeanzeige