XML Tutorial und Fragen zu XML und PB...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

XML Tutorial und Fragen zu XML und PB...

Beitrag von Bisonte »

Hallo.

Nun stellt euch mal vor : Von XML kein Plan.

HTML Kenntnisse sind vorhanden (die Basics halt).

Habt ihr evt. im Web irgendwo ein leicht verdauliches XML Einsteigertutorial in Deutsch gefunden ?
Zuletzt geändert von Bisonte am 08.10.2008 02:38, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
PureProgger
Beiträge: 40
Registriert: 19.12.2006 18:38

Beitrag von PureProgger »

Hallo,

und wieder einmal....
google ist dein Freund.
Gib ein : xml tutorial

meist aber in englischer Sprache! Müsste aber verständlich sein

gruß
PB 4.30
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Da ich google schon bemüht habe (ohne mir sichtbaren Erfolg) hab ich hier mal nachgefragt .... Kann ja sein das irgendjemand, irgendwie und irgendwann mal eins aufgetan hätte ;)

Aber davon ab... Das Beispiel in der Hilfe für die XML Nutzung ist ja gruselig... Sind die Pointer nötig ?

Ich möchte eigentlich nur "CivIV" XML Dateien manipulieren und das sieht
mir sehr simpel aus.

Mit Strings ist das ja alles kein Problem , aber wozu gibts denn die XML unterstützung in PB ?
Man muss ja auch mal nen anderen weg nach Rom beschreiten ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Bisonte hat geschrieben:Ich möchte eigentlich nur "CivIV" XML Dateien manipulieren und das sieht
mir sehr simpel aus.
wenn's nicht zu gross ist, dann poste doch mal so ein "CivIV"-XML. Und dann
schreibst Du dazu, was Du gerne wie ändern möchtest.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Die sind eigentlich recht einfach gestrickt, es gibt nur sehr viele
(Modding) von denen und die sind auch recht gross.

Aus Urheberrechtlichen Gründen werd ich hier mal keine von den Dateien
posten (wer weiss vielleicht ists ja doch erlaubt, aber sicher bin ich mir
halt nicht.)

Aber im Prinzip ist das immer so...

Code: Alles auswählen

<Einheiten>
  <Einheit>wert</Einheit>
  <Angriff>wert</Angriff>
</Einheiten>
so sind die im prinzip aufgebaut. Eigentlich per stringfunktionen locker
machbar, nur würd ich gern mal sehen ob das XML nicht sinnvoller ist
dafür (und vielleicht noch für andere sachen)

Sinn und Zweck ist halt z.B. ein Einheiten-Editor oder ein MapEditor usw...
um der Horde der Civ4 Modder ein wenig die Arbeit zu erleichtern ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das ist doch sehr einfach gestrickt, keine Attribute u. ä.
Einfach durch den Baum wandern und mit GetXMLNodeText die Werte
erfragen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Meinst du das wie mit NextDatabaseRow oder NextDirectoryEntry ?

das klingt dann in der tat simpel ...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Bisonte hat geschrieben:Meinst du das wie mit NextDatabaseRow oder NextDirectoryEntry ?

das klingt dann in der tat simpel ...
Genauso meine ich, aber ohne Database :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

ts-soft hat geschrieben: Genauso meine ich, aber ohne Database :wink:
Ja, nee ! Is Klar :lol:
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Bisonte hat geschrieben:Aus Urheberrechtlichen Gründen werd ich hier mal keine von den Dateien
posten (wer weiss vielleicht ists ja doch erlaubt, aber sicher bin ich mir
halt nicht.)
nunja, dann wird es nicht möglich sein, Dir ein lauffähiges Beispiel zu
zeigen.

Vom Prinzip her kannst Du wie folgt vorgehen:

Code: Alles auswählen

Structure s_Einheiten
  Einheit.s
  Angriff.s
EndStructure

NewList Einheiten.s_Einheiten()

oXML = LoadXML(#PB_Any, "[deinpfad]\CivIV.XML")

If oXML
  
  NodeCounter = 1
  
  Repeat
    
    oNodeEinheiten = XMLNodeFromPath(RootXMLNode(oXML), "[DeinKompletterNodePfad]/Einheiten[" + Str(NodeCounter) + "]")
    
    If oNodeEinheiten = 0 : Break : EndIf
    
    AddElement(Einheiten())
    
    oNodeEinheit = XMLNodeFromPath(oNodeEinheiten, "Einheit")
    
    If oNodeEinheit
      Einheiten()\Einheit = GetXMLNodeText(oNodeEinheit)
    EndIf
    
    oNodeAngriff = XMLNodeFromPath(oNodeEinheiten, "Angriff")
     
    If oNodeAngriff
      Einheiten()\Angriff = GetXMLNodeText(oNodeAngriff)
    EndIf
    
    NodeCounter + 1
    
  ForEver
  
  FreeXML(oXML)
  
EndIf
Beachte, dass obiges Beispiel nicht lauffähig ist. Hierzu musst Du den
kompletten Pfad in XMLNodeFromPath() eintragen (also nicht nur
"Einheiten"...).

Ich denke, dass der Code nicht allzu schwierig zu verstehen sein sollte.
Falls dennoch Fragen sind: immer her damit!

Grüße ... Kiffi

// Edit: Kleinen Fehler behoben
Zuletzt geändert von Kiffi am 30.08.2008 10:44, insgesamt 1-mal geändert.
a²+b²=mc²
Antworten