Seite 2 von 3
Verfasst: 09.02.2008 20:19
von Scarabol
Super danke Kiffi!!!
Das anpassen bzw. erweitern schaff ich nur hatte ich bisher das Grundsystem nicht verstanden
@Stargate
....merkt doch keiner

und falls doch ist noch die Frage ob sie dich wirklich verklagen....
Gruß
Scarabol
Verfasst: 22.02.2008 18:51
von Scarabol
Hi Leute,
mal angenommen die Anzahl der Faces ist vorher nicht angegeben kann ich dann trotzdem alle Faces ermitteln, die zwischen <submesh> und </submesh> angegeben wurden?
Gruß
Scarabol
Verfasst: 22.02.2008 19:35
von Kiffi
Scarabol hat geschrieben:mal angenommen die Anzahl der Faces ist vorher nicht angegeben kann ich dann trotzdem alle Faces ermitteln, die zwischen <submesh> und </submesh> angegeben wurden?
ja, kannst Du:
Code: Alles auswählen
Structure s_Face
v1.l
v2.l
v3.l
EndStructure
oXML = LoadXML(#PB_Any, "D:\Ogre.xml")
If oXML
NewList Face.s_Face()
FaceCounter = 0
Repeat
oNode = XMLNodeFromPath(RootXMLNode(oXML), "mesh/submeshes/submesh/faces/face[" + Str(FaceCounter) + "]")
If oNode = 0 : Break : EndIf
AddElement(Face())
If ExamineXMLAttributes(oNode)
While NextXMLAttribute(oNode)
Select XMLAttributeName(oNode)
Case "v1" : Face()\v1 = Val(XMLAttributeValue(oNode))
Case "v2" : Face()\v2 = Val(XMLAttributeValue(oNode))
Case "v3" : Face()\v3 = Val(XMLAttributeValue(oNode))
EndSelect
Wend
EndIf
FaceCounter + 1
ForEver
Debug "Anzahl Faces: " + Str(CountList(Face()))
FreeXML(oXML)
EndIf
Falls Du Fragen zum Code hast -> Immer her damit
Grüße ... Kiffi
Verfasst: 22.02.2008 20:43
von Scarabol
So jetzt kommt die Masterfrage
Wie mache ich das dann bei folgender Struktur:
<main>
<sub1 bla bla bla>
<sub2 ne ne ne>
</main>
Die Subs haben alle unterschiedliche Namen, die nicht nummeriert sind
Die Unterschiedlichen Parameter kann ich natürlich mit ExamineAttributes auslesen...
Gruß
Scarabol
Verfasst: 22.02.2008 20:46
von Kiffi
Scarabol hat geschrieben:Wie mache ich das dann bei folgender Struktur:
dann musst du die Childnodes von main durchlaufen: ChildXMLNode()
Grüße ... Kiffi
Verfasst: 25.02.2008 17:54
von Scarabol
hmm funzt nicht....
Code: Alles auswählen
LoadXML(1, "data\map.txt")
main = MainXMLNode(1)
Debug XMLChildCount(main)
hier die "map"
Code: Alles auswählen
<map width="11" height="11" playerx="7" playery="8">
<!-- Grasfläche erstellen -->
<area startx="1" starty="1" stopx="10" stopy="10" boden="1" state="1"></area>
<area startx="1" starty="7" stopx="4" stopy="10" boden="-70" state="0"></area>
<!-- Haus einfügen -->
<field x="7" y="4" house="60" state="0"></field>
<field x="8" y="4" house="61" state="0"></field>
<field x="9" y="4" house="62" state="0"></field>
<field x="7" y="5" house="63" state="0"></field>
<field x="8" y="5" house="64" state="0"></field>
<field x="9" y="5" house="65" state="0"></field>
<field x="7" y="6" house="66" state="0"></field>
<field x="8" y="6" house="67" state="0"></field>
<field x="9" y="6" house="68" state="0"></field>
<area startx="6" starty="3" stopx="10" stopy="3" boden="59" state="0"></area>
<area startx="6" starty="7" stopx="10" stopy="7" boden="59" state="0"></area>
<area startx="6" starty="4" stopx="6" stopy="7" boden="59" state="0"></area>
<area startx="10" starty="4" stopx="10" stopy="7" boden="59" state="0"></area>
<field x="8" y="7" house="0" state="1"></field>
</map>
Wie fehlerresistent ist das XML System eigentlich?
Also kann ich auch knoten auslesen, die nie beendet werden? So könnt ich mir die ganzen End-Tags bei field und area sparen...
Gruß
Scarabol
Verfasst: 25.02.2008 18:33
von edel
Wenn nichts dazwischen steht kannst du es auch so schreiben :
Verfasst: 27.02.2008 20:32
von Scarabol
Danke Leute,
kann mir noch einer sagen, was ich da oben falsch gemacht hab?
Childcount gibt immer 0
Gruß
Scarabol
Verfasst: 27.02.2008 21:55
von Kiffi
Scarabol hat geschrieben:kann mir noch einer sagen, was ich da oben falsch gemacht hab?
Childcount gibt immer 0

mh, ich musste auch knobeln. Des Rätsels Lösung:
Du verwendest Umlaute in Deinen Kommentaren.
Code: Alles auswählen
<!-- Grasfläche erstellen -->
[...]
<!-- Haus einfügen -->
bitte ersetzen durch:
Code: Alles auswählen
<!-- Grasflaeche erstellen -->
[...]
<!-- Haus einfuegen -->
und hier der entsprechende Code, um dann die
Childnodes korrekt auszulesen:
Code: Alles auswählen
LoadXML(1, "d:\map.xml")
RootNode = RootXMLNode(1)
ChildNode = ChildXMLNode(RootNode)
Debug GetXMLNodeName(ChildNode) ; -> map
Debug XMLChildCount(ChildNode) ; -> 18
Grüße ... Kiffi
Verfasst: 27.02.2008 22:58
von Scarabol
Super Danke!
Hätte man das vorher vielleicht mit den Error Befehlen aus der XML Lib herausfinden können?
Gruß
Scarabol