Construire un XML ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Construire un XML ?

Message par comtois »

Je tente de reproduire cet XML, et je n'arrive pas à reproduire l'identique !

Code : Tout sélectionner

<scene version="1.6">
  <primitives highestID="1">
    <primitive id="1" name="rectangle1" type="rectangle" visible="true" snap="vertex" autoUV="true" groupID="-1">
      <tag>User info</tag>
      <vertices>
        <vertex id="0" x="-384" y="192" z="0" />
        <vertex id="1" x="128" y="192" z="0" />
        <vertex id="2" x="128" y="-320" z="0" />
        <vertex id="3" x="-384" y="-320" z="0" />
      </vertices>
      <polygons>
        <poly mid="0">
          <vertex vid="0" u0="-3" v0="-1.5" />
          <vertex vid="1" u0="1" v0="-1.5" />
          <vertex vid="2" u0="1" v0="2.5" />
          <vertex vid="3" u0="-3" v0="2.5" />
        </poly>
      </polygons>
    </primitive>
  </primitives>
</scene>
Apparemment ça ne merdouille que pour le tag
au lieu de ça
<tag>User info</tag>
j'ai ça
<tag/>
J'ai essayé en mettant

Code : Tout sélectionner

*NodeTag=CreateXMLNode(*NodePrimitive,0,#PB_XML_CData)
Ou
*NodeTag=CreateXMLNode(*NodePrimitive,0,#PB_XML_Comment)
Mais ça ne donne rien :?

Deuxième question, quand j'exporte le XML, PB ajoute un entête
<?xml version="1.0" encoding="UTF-8"?>
Je comprends que ça peut être important (pour distinguer de l'unicode), mais dans mon cas je n'en ai pas besoin, donc je bricole en jouant sur l'adresse Peeks(*Mem+38 ) pour afficher le résultat, mais il n'y a pas une solution plus propre d'enlever cet entête ?


Et voici le code pour tester

Code : Tout sélectionner

;-Création XML
CreateXML(0)

*NodeMain=CreateXMLNode(RootXMLNode(0))
SetXMLNodeName(*NodeMain, "scene")
SetXMLAttribute(*NodeMain, "version", "1.6")

*NodePrimitives=CreateXMLNode(*NodeMain)
SetXMLNodeName(*NodePrimitives, "primitives")
SetXMLAttribute(*NodePrimitives, "highestID", "1")


*NodePrimitive=CreateXMLNode(*NodePrimitives)
SetXMLNodeName(*NodePrimitive, "primitive")
For i = 1 To 7
  Read Attribute.s
  Read Value.s
  SetXMLAttribute(*NodePrimitive, Attribute, Value)
Next i

*NodeTag=CreateXMLNode(*NodePrimitive)
SetXMLNodeName(*NodeTag, "tag")

*NodeVertices=CreateXMLNode(*NodePrimitive)
SetXMLNodeName(*NodeVertices, "vertices")

*NodePolygones=CreateXMLNode(*NodePrimitive)
SetXMLNodeName(*NodePolygones, "polygons")


For i=0 To 3
  *NodeVertex=CreateXMLNode(*NodeVertices)
  SetXMLNodeName(*NodeVertex, "vertex")
  SetXMLAttribute(*NodeVertex, "id", Str(i))
  Read x.s
  Read y.s
  Read z.s
  
  SetXMLAttribute(*NodeVertex, "x", x)
  SetXMLAttribute(*NodeVertex, "y", y)
  SetXMLAttribute(*NodeVertex, "z", z)
Next i

*NodePoly=CreateXMLNode(*NodePolygones)
SetXMLNodeName(*NodePoly, "poly")
SetXMLAttribute(*NodePoly, "mid", "0")

For i=0 To 3
  *NodeVertex=CreateXMLNode(*NodePoly)
  SetXMLNodeName(*NodeVertex, "vertex")
  SetXMLAttribute(*NodeVertex, "vid", Str(i))
  Read u0.s
  Read v0.s
  SetXMLAttribute(*NodeVertex, "u0", u0)
  SetXMLAttribute(*NodeVertex, "v0", v0)
Next i

;-XML --> Texte
*Mem=AllocateMemory(ExportXMLSize(0))
FormatXML(0,#PB_XML_CutSpace)
ExportXML(0,*Mem,ExportXMLSize(0))

;I dont need <?xml version="1.0" encoding="UTF-8"?> 
Debug PeekS(*Mem+38) ;<<< Is there another way ? 

DataSection
Data.s "id","1"
Data.s "name","rectangle1"
Data.s "type","rectangle"
Data.s "visible","true"
Data.s "snap","vertex"
Data.s "autoUV","true"
Data.s "groupID","-1"

Data.s "-384", "192","0"
Data.s  "128", "192","0"
Data.s  "128","-320","0"
Data.s "-384","-320","0"

Data.s "-3", "-1.5"
Data.s "1", "-1.5"
Data.s "1", "2.5"
Data.s "-3", "2.5"
EndDataSection 
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Ton code crash. Je n'envoie pas le rapport d'erreur à Microsoft.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tu utilises la version 4.10 beta 2 ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je pensais que j'avais testé toutes les possibilités, mais je viens de m'apercevoir qu'il restait encore celle ci
SetXMLNodeText(*NodeTag, "User info")
et c'est la bonne !! ça marche !!

Par contre si quelqu'un sait comment supprimer proprement l'entête ajouté par PB quand on exporte, je suis preneur.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

comtois a écrit :Je pensais que j'avais testé toutes les possibilités, mais je viens de m'apercevoir qu'il restait encore celle ci
SetXMLNodeText(*NodeTag, "User info")
et c'est la bonne !! ça marche !!

Par contre si quelqu'un sait comment supprimer proprement l'entête ajouté par PB quand on exporte, je suis preneur.
C'est peut être un petit bogue ...

Si PB ajoute un entête, c'est probablement pour une bonne raison. À mon avis le fait qu'il y est un entête ne deverait pas changer l'utilisation du fichier.

Faut dire je commence à peine à tester les commandes XML.

A+
Guimauve
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Oui , PB ajoute la déclaration et c'est important qu'elle y soit, en fait c'est Deled qui ne la gère pas, et pire génère une erreur !!
---------------------------
Error
---------------------------
CallBackProc: TPluginManager.SetData: Unexpected character '?' in input (...<?xml vers), position (1,3).
---------------------------
OK
---------------------------
Bon son auteur vient de me répondre, il va songer à l'utiliser. ça reste vague, c'est surement pas sa priorité :?

Bref en enlevant cette déclaration , j'arrive à importer ma scène dans Deled.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Donc la seule astuce que je vois serais de modifier le xml en mode texte.
Un petit programme qui charge le xml et qui le ré-écrit en sans l'entête.

S'il y a plusieurs fichiers bien sûr. Si non, le bon vieux Bloc-Note fait
l'affaire, mais je suis d'accord pour dire que ça fait un opération de plus.
Et Deled devrait être en mesure de gérer ce standard.

A+
Guimauve
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Guimauve a écrit :Donc la seule astuce que je vois serais de modifier le xml en mode texte.
oui c'est fait dans le programme déjà

Code : Tout sélectionner

;-XML --> Texte
*Mem=AllocateMemory(ExportXMLSize(0))
FormatXML(0,#PB_XML_CutSpace)
ExportXML(0,*Mem,ExportXMLSize(0)) 
Et ensuite je supprime les 38 premiers caractères en attendant que l'auteur de Deled prenne en charge la déclaration XML :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre