PureBasic et XML

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
yann64
Messages : 33
Inscription : mer. 26/mai/2004 20:59
Contact :

PureBasic et XML

Message par yann64 »

J'aurais voulu savoir si quelqu'un à déjà programmé des procedures permettant le lecture de fichiers à la norme XML. Si c'est la cas pourrait-il les mettre en ligne, cela m'éviterai à avoir à réinventer la roue.
De plus, un parseur XML est-il prévu à l'avenir pour PureBasic? Ce format est tout de même de plus en plus utilisé dans les applications et serait je pense utile à pas mal de personnes.
Amicalement
Yann64
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

c'est prévu pour x3D, qd on aurra fini le z-buffering, un flat shading correct et un cliping correct, on prevoi de pouvoir charger pas mal de fichier, et les xml sont dans la liste :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Désolé de remonté un si vieux sujet ! Mais je voulais savoir ce qu'il en était de l'XML avec purebasic ? car j'ai rien trouvé de vraiment pratique et utilisable pour l'instant...mais peut être que je ne sais pas ou chercher !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est prévu pour x3D
moi c'est ça que j'aimerai savoir ce que c'est devenu !! :?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

voilà un pack de test pour xml que j'ai fait il y a qq mois
http://www.serveurperso.com/~flype/XML_HTML.zip
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

c'est super Flype exactement ce que je voulais...
Question j'essaye d'ouvrir un fichier xml de 22mo et il ne veut pas me l'ouvrir... est ce que c'est du a la taille ou a la structur ?
voilà a quoi ressemble la strucutre de mon fichier

Code : Tout sélectionner

<?xml version="1.0"?>
<!DOCTYPE mame [
<!ELEMENT mame (game+)>
	<!ELEMENT game (description, year?, manufacturer, history?, biosset*, rom*, disk*, sample*, chip*, video?, sound?, input?, dipswitch*, driver?)>
		<!ATTLIST game name CDATA #REQUIRED>
		<!ATTLIST game sourcefile CDATA #IMPLIED>
		<!ATTLIST game runnable (yes|no) "yes">
		<!ATTLIST game cloneof CDATA #IMPLIED>
		<!ATTLIST game romof CDATA #IMPLIED>
		<!ATTLIST game sampleof CDATA #IMPLIED>
		<!ELEMENT description (#PCDATA)>
		<!ELEMENT year (#PCDATA)>
		<!ELEMENT manufacturer (#PCDATA)>
		<!ELEMENT history (#PCDATA)>
		<!ELEMENT biosset EMPTY>
			<!ATTLIST biosset name CDATA #REQUIRED>
			<!ATTLIST biosset description CDATA #REQUIRED>
			<!ATTLIST biosset default (yes|no) "no">
		<!ELEMENT rom EMPTY>
			<!ATTLIST rom name CDATA #REQUIRED>
			<!ATTLIST rom bios CDATA #IMPLIED>
			<!ATTLIST rom size CDATA #REQUIRED>
			<!ATTLIST rom crc CDATA #IMPLIED>
			<!ATTLIST rom md5 CDATA #IMPLIED>
			<!ATTLIST rom sha1 CDATA #IMPLIED>
			<!ATTLIST rom merge CDATA #IMPLIED>
			<!ATTLIST rom region CDATA #IMPLIED>
			<!ATTLIST rom offset CDATA #IMPLIED>
			<!ATTLIST rom status (baddump|nodump|good) "good">
			<!ATTLIST rom dispose (yes|no) "no">
			<!ATTLIST rom soundonly (yes|no) "no">
		<!ELEMENT disk EMPTY>
			<!ATTLIST disk name CDATA #REQUIRED>
			<!ATTLIST disk md5 CDATA #IMPLIED>
			<!ATTLIST disk sha1 CDATA #IMPLIED>
			<!ATTLIST disk region CDATA #IMPLIED>
			<!ATTLIST disk index CDATA #IMPLIED>
		<!ELEMENT sample EMPTY>
			<!ATTLIST sample name CDATA #REQUIRED>
		<!ELEMENT chip EMPTY>
			<!ATTLIST chip name CDATA #REQUIRED>
			<!ATTLIST chip type (cpu|audio) #REQUIRED>
			<!ATTLIST chip soundonly (yes|no) "no">
			<!ATTLIST chip clock CDATA #IMPLIED>
		<!ELEMENT video EMPTY>
			<!ATTLIST video screen (raster|vector) #REQUIRED>
			<!ATTLIST video orientation (vertical|horizontal) #REQUIRED>
			<!ATTLIST video width CDATA #IMPLIED>
			<!ATTLIST video height CDATA #IMPLIED>
			<!ATTLIST video aspectx CDATA #IMPLIED>
			<!ATTLIST video aspecty CDATA #IMPLIED>
			<!ATTLIST video refresh CDATA #REQUIRED>
		<!ELEMENT sound EMPTY>
			<!ATTLIST sound channels CDATA #REQUIRED>
		<!ELEMENT input EMPTY>
			<!ATTLIST input service (yes|no) "no">
			<!ATTLIST input tilt (yes|no) "no">
			<!ATTLIST input players CDATA #REQUIRED>
			<!ATTLIST input control CDATA #IMPLIED>
			<!ATTLIST input buttons CDATA #IMPLIED>
			<!ATTLIST input coins CDATA #IMPLIED>
		<!ELEMENT dipswitch (dipvalue*)>
			<!ATTLIST dipswitch name CDATA #REQUIRED>
			<!ELEMENT dipvalue EMPTY>
				<!ATTLIST dipvalue name CDATA #REQUIRED>
				<!ATTLIST dipvalue default (yes|no) "no">
		<!ELEMENT driver EMPTY>
			<!ATTLIST driver status (good|imperfect|preliminary) #REQUIRED>
			<!ATTLIST driver emulation (good|imperfect|preliminary) #REQUIRED>
			<!ATTLIST driver color (good|imperfect|preliminary) #REQUIRED>
			<!ATTLIST driver sound (good|imperfect|preliminary) #REQUIRED>
			<!ATTLIST driver graphic (good|imperfect|preliminary) #REQUIRED>
			<!ATTLIST driver cocktail (good|imperfect|preliminary) #IMPLIED>
			<!ATTLIST driver protection (good|imperfect|preliminary) #IMPLIED>
			<!ATTLIST driver palettesize CDATA #REQUIRED>
]>

<mame>
	<game name="puckman" sourcefile="pacman.c">
		<description>PuckMan (Japan set 1)</description>
		<year>1980</year>
		<manufacturer>Namco</manufacturer>
		<rom name="namcopac.6e" size="4096" crc="fee263b3" sha1="87117ba5082cd7a615b4ec7c02dd819003fbd669" region="cpu1" offset="0"/>
		<rom name="namcopac.6f" size="4096" crc="39d1fc83" sha1="326dbbf94c6fa2e96613dedb53702f8832b47d59" region="cpu1" offset="1000"/>
		<rom name="namcopac.6h" size="4096" crc="02083b03" sha1="7e1945f6eb51f2e51806d0439f975f7a2889b9b8" region="cpu1" offset="2000"/>
		<rom name="namcopac.6j" size="4096" crc="7a36fe55" sha1="01b4c38108d9dc4e48da4f8d685248e1e6821377" region="cpu1" offset="3000"/>
		<rom name="pacman.5e" size="4096" crc="0c944964" sha1="06ef227747a440831c9a3a613b76693d52a2f0a9" region="gfx1" dispose="yes" offset="0"/>
		<rom name="pacman.5f" size="4096" crc="958fedf9" sha1="4a937ac02216ea8c96477d4a15522070507fb599" region="gfx2" dispose="yes" offset="0"/>
		<rom name="82s123.7f" size="32" crc="2fc650bd" sha1="8d0268dee78e47c712202b0ec4f1f51109b1f2a5" region="proms" offset="0"/>
		<rom name="82s126.4a" size="256" crc="3eb3a8e4" sha1="19097b5f60d1030f8b82d9f1d3a241f93e5c75d6" region="proms" offset="20"/>
		<rom name="82s126.1m" size="256" crc="a9cc86bf" sha1="bbcec0570aeceb582ff8238a4bc8546a23430081" region="sound1" offset="0"/>
		<rom name="82s126.3m" size="256" crc="77245b66" sha1="0c4d0bee858b97632411c440bea6948a74759746" region="sound1" offset="100"/>
		<chip type="cpu" name="Z80" clock="3072000"/>
		<chip type="audio" name="Namco"/>
		<video screen="raster" orientation="vertical" width="224" height="288" aspectx="3" aspecty="4" refresh="60.606060"/>
		<sound channels="1"/>
		<input players="2" control="joy4way" buttons="1" coins="2"/>
		<dipswitch name="Rack Test (Cheat)">
			<dipvalue name="Off" default="yes"/>
			<dipvalue name="On"/>
		</dipswitch>
		<dipswitch name="Service Mode">
			<dipvalue name="Off" default="yes"/>
			<dipvalue name="On"/>
		</dipswitch>
		<dipswitch name="Cabinet">
			<dipvalue name="Upright" default="yes"/>
			<dipvalue name="Cocktail"/>
		</dipswitch>
		<dipswitch name="Coinage">
			<dipvalue name="2 Coins/1 Credit"/>
			<dipvalue name="1 Coin/1 Credit" default="yes"/>
			<dipvalue name="1 Coin/2 Credits"/>
			<dipvalue name="Free Play"/>
		</dipswitch>
		<dipswitch name="Lives">
			<dipvalue name="1"/>
			<dipvalue name="2"/>
			<dipvalue name="3" default="yes"/>
			<dipvalue name="5"/>
		</dipswitch>
		<dipswitch name="Bonus Life">
			<dipvalue name="10000" default="yes"/>
			<dipvalue name="15000"/>
			<dipvalue name="20000"/>
			<dipvalue name="None"/>
		</dipswitch>
		<dipswitch name="Difficulty">
			<dipvalue name="Normal" default="yes"/>
			<dipvalue name="Hard"/>
		</dipswitch>
		<dipswitch name="Ghost Names">
			<dipvalue name="Normal" default="yes"/>
			<dipvalue name="Alternate"/>
		</dipswitch>
		<dipswitch name="2x Speed Cheat">
			<dipvalue name="Disabled" default="yes"/>
			<dipvalue name="Enabled Always"/>
			<dipvalue name="Enabled with Button"/>
		</dipswitch>
		<driver status="good" emulation="good" color="good" sound="good" graphic="good" palettesize="16"/>
	</game>
	<game name="puckmana" sourcefile="pacman.c" cloneof="puckman" romof="puckman">
		<description>PuckMan (Japan set 2)</description>
		<year>1980</year>
		<manufacturer>Namco</manufacturer>
		<rom name="pacman.6e" size="4096" crc="c1e6ab10" sha1="e87e059c5be45753f7e9f33dff851f16d6751181" region="cpu1" offset="0"/>
		<rom name="pacman.6f" size="4096" crc="1a6fb2d4" sha1="674d3a7f00d8be5e38b1fdc208ebef5a92d38329" region="cpu1" offset="1000"/>
		<rom name="pacman.6h" size="4096" crc="bcdd1beb" sha1="8e47e8c2c4d6117d174cdac150392042d3e0a881" region="cpu1" offset="2000"/>
		<rom name="prg7" size="2048" crc="b6289b26" sha1="d249fa9cdde774d5fee7258147cd25fa3f4dc2b3" region="cpu1" offset="3000"/>
		<rom name="prg8" size="2048" crc="17a88c13" sha1="eb462de79f49b7aa8adb0cc6d31535b10550c0ce" region="cpu1" offset="3800"/>
		<rom name="chg1" size="2048" crc="2066a0b7" sha1="6d4ccc27d6be185589e08aa9f18702b679e49a4a" region="gfx1" dispose="yes" offset="0"/>
		<rom name="chg2" size="2048" crc="3591b89d" sha1="79bb456be6c39c1ccd7d077fbe181523131fb300" region="gfx1" dispose="yes" offset="800"/>
		<rom name="pacman.5f" merge="pacman.5f" size="4096" crc="958fedf9" sha1="4a937ac02216ea8c96477d4a15522070507fb599" region="gfx2" dispose="yes" offset="0"/>
		<rom name="82s123.7f" merge="82s123.7f" size="32" crc="2fc650bd" sha1="8d0268dee78e47c712202b0ec4f1f51109b1f2a5" region="proms" offset="0"/>
		<rom name="82s126.4a" merge="82s126.4a" size="256" crc="3eb3a8e4" sha1="19097b5f60d1030f8b82d9f1d3a241f93e5c75d6" region="proms" offset="20"/>
		<rom name="82s126.1m" merge="82s126.1m" size="256" crc="a9cc86bf" sha1="bbcec0570aeceb582ff8238a4bc8546a23430081" region="sound1" offset="0"/>
		<rom name="82s126.3m" merge="82s126.3m" size="256" crc="77245b66" sha1="0c4d0bee858b97632411c440bea6948a74759746" region="sound1" offset="100"/>
		<chip type="cpu" name="Z80" clock="3072000"/>
		<chip type="audio" name="Namco"/>
		<video screen="raster" orientation="vertical" width="224" height="288" aspectx="3" aspecty="4" refresh="60.606060"/>
		<sound channels="1"/>
		<input players="2" control="joy4way" buttons="1" coins="2"/>
		<dipswitch name="Rack Test (Cheat)">
			<dipvalue name="Off" default="yes"/>
			<dipvalue name="On"/>
		</dipswitch>
		<dipswitch name="Service Mode">
			<dipvalue name="Off" default="yes"/>
			<dipvalue name="On"/>
		</dipswitch>
		<dipswitch name="Cabinet">
			<dipvalue name="Upright" default="yes"/>
			<dipvalue name="Cocktail"/>
		</dipswitch>
		<dipswitch name="Coinage">
			<dipvalue name="2 Coins/1 Credit"/>
			<dipvalue name="1 Coin/1 Credit" default="yes"/>
			<dipvalue name="1 Coin/2 Credits"/>
			<dipvalue name="Free Play"/>
		</dipswitch>
		<dipswitch name="Lives">
			<dipvalue name="1"/>
			<dipvalue name="2"/>
			<dipvalue name="3" default="yes"/>
			<dipvalue name="5"/>
		</dipswitch>
		<dipswitch name="Bonus Life">
			<dipvalue name="10000" default="yes"/>
			<dipvalue name="15000"/>
			<dipvalue name="20000"/>
			<dipvalue name="None"/>
		</dipswitch>
		<dipswitch name="Difficulty">
			<dipvalue name="Normal" default="yes"/>
			<dipvalue name="Hard"/>
		</dipswitch>
		<dipswitch name="Ghost Names">
			<dipvalue name="Normal" default="yes"/>
			<dipvalue name="Alternate"/>
		</dipswitch>
		<dipswitch name="2x Speed Cheat">
			<dipvalue name="Disabled" default="yes"/>
			<dipvalue name="Enabled Always"/>
			<dipvalue name="Enabled with Button"/>
		</dipswitch>
		<driver status="good" emulation="good" color="good" sound="good" graphic="good" palettesize="16"/>
	</game>
</mame>
et voilà ce que j'ai fait comme code

Code : Tout sélectionner

;--------------------------------------
; Initialisation
;--------------------------------------

IncludeFile "xmlparser.pbi"

Structure Food_Struct
  code.s
  name.s
  weight.s
  color.s
EndStructure

NewList Food.Food_Struct()

;--------------------------------------
; Parse data in XML File
;--------------------------------------

If xml_Open("data/test.xml","mame")
    Repeat
      If xml_IsTag("game")
        Debug xml_Attr("name")
        Food()\name = xml_Attr("name")
        If xml_Child()
          Debug = xml_Data("description")
          xml_Parent()
        EndIf
      EndIf
    Until xml_Next()=#Null
Else
Debug "error"

EndIf
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

coucou typhoon, peux-tu mettre un lien vers le fichier en question que je puisse tester sur le meme fichier que toi plutot qu'un extrait...

nb:
j'utilise xml dans un de mes programme pour mon travail.
une 20aine d'employés chargent le fichier xml depuis leur poste sur notre serveur. je peux dire que les fonctions xml sont très sollicitées et çà marche du tonnerre. pas le moindre bug à signaler pour l'instant.

mais poste moi ici ton fichier que j'y jète un oeil...
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

le pb c'est qu'il fait plus de 20Mo
le mieux c'est télécharger Mame ici :http://www.mame.net/zips/mame089b.zip
tu decompresses l'archive et enduite en ligne de commande tu fait
" Mame -lx >list.xml " ça vas mouliner quelques bonnes seconde et tu aura la liste xml !

Dit moi si ça te vas ....sinon l'exemple que j'ai donné un peu plus haut c'est une toute petite partie du fichier en question
Voilà ...tient moi au courant et un grand merci d'avance pour l'aide !! :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ok je regarde et plus si affinité
bidouillé avec Mame ca peut etre assez amusant :D

mais dors et déja j'ai vu que le fichier xml n'arrive à se charger à cause du :

Code : Tout sélectionner

<!DOCTYPE mame [ ... ]>
dans l'entête du fichier xml. quand on l'enlève c'est ok.
reste quand meme à faire la routine de chargement en suivant
le shéma xml définit dans le DOCTYPE justement :twisted:
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

heu ouais c clair, après essai, tu as raison.
je vais me contenter du petit fichier çà ira très bien :D
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

oui avec le petit exemple c'est moin lourd qu'avec la liste généré par Mame.
Tient moi au courant de tes avancés :wink: et surtout un grand merci :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ca represente pas mal de taf alors je vais te demander d'etre un peu patient... mais chui dessus !
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Merci Flype et si je peu t'aider n'hesite pas ...
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Je viens un peu aux nouvelles Flype As tu réussi a faire quelques choses ?
merci d'avance

thy
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

la lib plante effectivement à cause de la taille du fichier.
celle de mon exemple c'est 'xmlparser.dll'.
peut etre que la 'msxml4.dll' de microsoft s'en sort mieux, je sais pas.

sorry Thyphoon. :x
Image
Répondre