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

GameProggD3D

Frischling

  • »GameProggD3D« ist der Autor dieses Themas

Beiträge: 67

Wohnort: Walding

Beruf: Schüler

  • Private Nachricht senden

1

28.06.2012, 10:40

XML-Parser C++ für Spieler-Initialisierung

Hi,

Ich suche nen Parser(so heißen die doch, oder?) für XML, mit dem ich eigentlich nur XML-Dateien einlesen und Nodes anhand von Attributen und Namen abfragen will (soll heißen: "Gib mir das Node "Spielertypen" und das child-node dieses Nodes: "Held", dass das Attribut "ID" mit dem Wert "3" hat).
Das Wichtige ist das mit den Attributen, weil der, den ich ausprobiert hab (rapidxml), konnte das nicht (oder zumindest wusste ich nicht, wie)
Wisst ihr einen guten?

Er sollte unter Visual Studio 2010 mit C++ funktionieren.

Hoffe, ihr könnt mir helfen.

ALTERNATIV:
Weiß wer, wie man das eingebaute XML von Visual Studio zum Laufen bringt?
Dann könnte man das, was ich wollte mit

C-/C++-Quelltext

1
doc.SelectSingleNode("/Movies/Movie[@Title='Wasabi']")


Aber wenn ich versuche, es einzubinden in mein C++-Projekt, kommt immer ein Fehler:

Quellcode

1
IntelliSense: ""#using"" erfordert, dass C++/CLI aktiviert ist.


Und ich weiß nicht, wie ich das einschalte oder ob das schlecht ist, wenn das an ist.
Programmiere Zombie-Spiel mit nem Freund

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »GameProggD3D« (28.06.2012, 11:04)


Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.06.2012, 11:16

Wenn du C++/CLI aktivierst wird aus deinem Projekt eine Managed DLL für .NET! Ich denke mal, dass willst du nicht machen.
Wobei die Xml-Bibliothek in .NET durchaus sehr fein ist.

Vielleicht ist der Parser schon etwas zu minimalistisch für deine Vorgabe, aber expat ist recht klein und schnell. Aber eigentlich liefert er einem nur nacheinander die Bestandteile der XML Datei und baut für dich afaik keinen Baum auf. Sprich er ist mehr ein SAX-Parser und kein DOM-Parser.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

GameProggD3D

Frischling

  • »GameProggD3D« ist der Autor dieses Themas

Beiträge: 67

Wohnort: Walding

Beruf: Schüler

  • Private Nachricht senden

3

28.06.2012, 11:22

Hauptsache, er kann die Werte der Nodes aus den XML-Dateien auslesen.
Meine XML-Datei sieht ungefähr so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
<characters>
    <heroes>
        <hero ID="1">
            <Angriff>12</Angriff>
        </hero>
        <hero ID="2">
            <Angriff>12</Angriff>
        </hero>
    </heroes>
    <monsters>
        <monster ID = "1"/>
    </monsters>
</characters>



Alles, was der Parser können muss, ist, den Angriff-Wert auslesen zu können, wenn ich dem Parser sage: "Es ist ein Held und er hat die ID 2". Kann er das? Wenn ja, nehm ich ihn.
Programmiere Zombie-Spiel mit nem Freund

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

4

28.06.2012, 11:25

Der sagt dir afaik (ist schon ne Weile her) etwas vereinfacht

- Jetzt geht characters auf
- Jetzt geht heroes auf
- Jetzt geht hero auf
- Jetzt geht Angriff auf
- Jetzt geht Angriff zu
- Jetzt geht hero zu
- Jetzt geht hero auf
etc.


Den richtigen Helden erwischen müsstest du dann selber machen. Okay, dann gibt es auf der anderen Seite den Overkill schlechthin Apache Xerces. Da bin ich sehr zuversichtlich, dass der kann was du willst, aber das Teil ist richtig riesig.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

5

28.06.2012, 11:59

für kleinere sachen kann ich eigentlich nur tiny xml empfehlen. ist verständlich und recht einfach zu bedienen.

hier mal ein tutorial .

GameProggD3D

Frischling

  • »GameProggD3D« ist der Autor dieses Themas

Beiträge: 67

Wohnort: Walding

Beruf: Schüler

  • Private Nachricht senden

6

28.06.2012, 12:16

Bis jetzt ist die einzige Möglichkeit, die ich sehe, um das zu machen, folgendes (bei TinyXML):

C-/C++-Quelltext

1
2
3
4
for(TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
{
    //Wenn das Attribut den Wert hat, aufhören und das dazugehörige Node speichern
}


Gehts auch ohne for-Schleife?

@Legend: Kann es dieses Xerces ohne for-Schleife?
Programmiere Zombie-Spiel mit nem Freund

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

7

28.06.2012, 12:25

Was du willst klingt für mich nach einer Bibliothek mit XPath-Implementierung. Du benutzt es ja schon oben.
http://xerces.apache.org/xerces-c/faq-parse-3.html#faq-2 Xerces scheint da was anzubieten, aber mit Einschränkungen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

28.06.2012, 13:20

Eine kleine aber feine Übersicht über verschiedene Parser: http://lars.ruoff.free.fr/xmlcpp/

Ich persönlich würde PugiXML empfehlen, weil DOM, relativ Speicher\CPU sparsam und XPath fähig.

GameProggD3D

Frischling

  • »GameProggD3D« ist der Autor dieses Themas

Beiträge: 67

Wohnort: Walding

Beruf: Schüler

  • Private Nachricht senden

10

28.06.2012, 15:48



der, den ich ausprobiert hab (rapidxml), konnte das nicht (oder zumindest wusste ich nicht, wie)


@Legend: XPath? Weiß nicht, kenn mich nicht aus bei XML, aber wenn du sagst, dass das sowas ist.
Programmiere Zombie-Spiel mit nem Freund

Werbeanzeige