Ca faisait un moment que je n'étais pas venu sur le forum AutoIt, ayant eu pas mal de boulot sur un projet personnel en AutoIt sans rencontrer de blocage (pour le contexte, il s'agit d'un script ouvert et gratuit en AutoIt pour un jeu en ligne - aka Dofus - dont le contenu reste en accord complet avec les CGUs du jeu).
Aujourd'hui je me heurte à un problème concernant un module de ce logiciel: comment (dans un script AutoIt) valider un fichier XML de configuration à l'aide d'un schéma XSD fourni, uniquement en local, et de préférence sans recoder un parseur à la mano? J'aurai pensé que l'utilisation de Microsoft.XMLDOM permettait ce genre de test, mais je n'ai rien trouvé ni ici (un seul topic contient le mot "XSD", et rien de notable), ni sur le forum anglais ("Je trouve pas" ... "j'ai trouvé, mais je dis pas comment").
Je ne veux pas réinventer la roue, ni la rendre carrée : juste une fonction qui rende true/false si le XML est conforme/non-conforme au XSD fourni (pas forcément besoin de savoir où est l'erreur).
Merci d'avance de votre aide !
ZDS
PJs :
- Fichier XML d'exemple avec 2 classes (Cra et Ecaflip) et une demi-douzaine de sorts chacun :
► Afficher le texteFichier XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<donnees version="2.2.3.36341.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DamageCalc.xsd">
<classe nom="Cra" auteur="ZDS" description="Archer, attaquant à distance">
<sort id="01" nom="Flèche Magique" lvl="1" description="Occasionne des dommages Feu et vole la portée de la cible">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="1" pomax="7">
<normal type="Inflige" element="Feu" min="9" max="11"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="11" max="13"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="1" pomax="8">
<normal type="Inflige" element="Feu" min="10" max="12"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="12" max="14"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="1" pomax="9">
<normal type="Inflige" element="Feu" min="11" max="13"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="13" max="15"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="1" pomax="10">
<normal type="Inflige" element="Feu" min="12" max="14"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="14" max="16"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="1" pomax="11">
<normal type="Inflige" element="Feu" min="13" max="15"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="15" max="17"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="1" pomax="12">
<normal type="Inflige" element="Feu" min="20" max="22"/>
<normal type="Vole" element="PO" min="2" max="2" delai="1"/>
<critique type="Inflige" element="Feu" min="24" max="26"/>
<critique type="Vole" element="PO" min="2" max="2" delai="1"/>
</niveau>
</sort>
<sort id="02" nom="Flèche Empoisonnée" lvl="1" description="Occasionne des dommages Neutre sur 2 tours">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="2" pomax="5">
<normal type="Inflige" element="Neutre" min="2" max="3" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="5" delai="2"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="2" pomax="6">
<normal type="Inflige" element="Neutre" min="3" max="4" delai="2"/>
<critique type="Inflige" element="Neutre" min="6" max="6" delai="2"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="2" pomax="7">
<normal type="Inflige" element="Neutre" min="4" max="5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="7" delai="2"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="2" pomax="8">
<normal type="Inflige" element="Neutre" min="5" max="6" delai="2"/>
<critique type="Inflige" element="Neutre" min="8" max="8" delai="2"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="2" pomax="9">
<normal type="Inflige" element="Neutre" min="6" max="7" delai="2"/>
<critique type="Inflige" element="Neutre" min="9" max="9" delai="2"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="2" pomax="10">
<normal type="Inflige" element="Neutre" min="9" max="10" delai="2"/>
<critique type="Inflige" element="Neutre" min="12" max="12" delai="2"/>
</niveau>
</sort>
<sort id="03" nom="Flèche de Recul" lvl="1" description="Occasionne des dommages Air et pousse la cible">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="1" pomax="3">
<normal type="Inflige" element="Air" min="11" max="14"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="13" max="16"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Air" min="12" max="15"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="14" max="17"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Air" min="13" max="16"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="15" max="18"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="1" pomax="6">
<normal type="Inflige" element="Air" min="14" max="17"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="17" max="20"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="1" pomax="7">
<normal type="Inflige" element="Air" min="15" max="18"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="18" max="21"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="1" pomax="8">
<normal type="Inflige" element="Air" min="18" max="21"/>
<normal type="Pousse" element="Aucun" min="4" max="4"/>
<critique type="Inflige" element="Air" min="21" max="24"/>
<critique type="Pousse" element="Aucun" min="4" max="4"/>
</niveau>
</sort>
</classe>
<classe nom="Ecaflip" auteur="ZDS" description="Maître du hasard">
<sort id="00" nom="Félintion" lvl="0" description="Vole des points de vie aux ennemis ou soigne les alliés, tout en repoussant la cible">
<niveau nom="1" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="11" max="20" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="21" max="50" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="21" max="25" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="51" max="55" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="2" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="12" max="21" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="23" max="54" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="22" max="26" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="55" max="59" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="3" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="13" max="22" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="25" max="58" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="23" max="27" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="59" max="63" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="4" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="14" max="23" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="27" max="62" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="24" max="28" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="63" max="67" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="15" max="24" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="29" max="66" target="Ami"/>
<normal type="Pousse" element="Aucun" min="2" max="2"/>
<critique type="Vole" element="Terre" min="25" max="29" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="67" max="71" target="Ami"/>
<critique type="Pousse" element="Aucun" min="2" max="2"/>
</niveau>
<niveau nom="6" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="19" max="28" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="36" max="75" target="Ami"/>
<normal type="Pousse" element="Aucun" min="2" max="2"/>
<critique type="Vole" element="Terre" min="29" max="33" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="76" max="80" target="Ami"/>
<critique type="Pousse" element="Aucun" min="2" max="2"/>
</niveau>
</sort>
<sort id="01" nom="Pile ou Face" lvl="1" description="Pile ou Face inflige des dégâts de Terre à un ennemi, mais sur un mauvais coup du destin, peut le soigner">
<niveau nom="1" pa="3" cc="50" ec="100" pomin="0" pomax="5">
<normal type="Inflige" element="Terre" min="4" max="11"/>
<normal type="Soigne" element="Feu" min="1" max="7"/>
<critique type="Inflige" element="Terre" min="4" max="12"/>
<critique type="Soigne" element="Feu" min="1" max="3"/>
</niveau>
<niveau nom="2" pa="3" cc="50" ec="100" pomin="0" pomax="5">
<normal type="Inflige" element="Terre" min="4" max="12"/>
<normal type="Soigne" element="Feu" min="2" max="9"/>
<critique type="Inflige" element="Terre" min="4" max="13"/>
<critique type="Soigne" element="Feu" min="1" max="4"/>
</niveau>
<niveau nom="3" pa="3" cc="50" ec="100" pomin="0" pomax="6">
<normal type="Inflige" element="Terre" min="4" max="13"/>
<normal type="Soigne" element="Feu" min="2" max="9"/>
<critique type="Inflige" element="Terre" min="4" max="14"/>
<critique type="Soigne" element="Feu" min="1" max="4"/>
</niveau>
<niveau nom="4" pa="3" cc="50" ec="100" pomin="0" pomax="6">
<normal type="Inflige" element="Terre" min="4" max="14"/>
<normal type="Soigne" element="Feu" min="3" max="10"/>
<critique type="Inflige" element="Terre" min="4" max="15"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
<niveau nom="5" pa="3" cc="50" ec="100" pomin="0" pomax="7">
<normal type="Inflige" element="Terre" min="4" max="15"/>
<normal type="Soigne" element="Feu" min="4" max="11"/>
<critique type="Inflige" element="Terre" min="4" max="17"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="0" pomax="7">
<normal type="Inflige" element="Terre" min="6" max="19"/>
<normal type="Soigne" element="Feu" min="5" max="12"/>
<critique type="Inflige" element="Terre" min="9" max="24"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
</sort>
<sort id="04" nom="Bluff" lvl="3" description="Le Bluff inflige aléatoirement des dégâts d'Air ou d'Eau">
<niveau nom="1" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="22" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="22" coef="0.5"/>
<critique type="Inflige" element="Eau" min="25" max="25" coef="0.5"/>
<critique type="Inflige" element="Air" min="25" max="25" coef="0.5"/>
</niveau>
<niveau nom="2" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="25" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="25" coef="0.5"/>
<critique type="Inflige" element="Eau" min="28" max="28" coef="0.5"/>
<critique type="Inflige" element="Air" min="28" max="28" coef="0.5"/>
</niveau>
<niveau nom="3" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="28" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="28" coef="0.5"/>
<critique type="Inflige" element="Eau" min="33" max="33" coef="0.5"/>
<critique type="Inflige" element="Air" min="33" max="33" coef="0.5"/>
</niveau>
<niveau nom="4" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="35" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="35" coef="0.5"/>
<critique type="Inflige" element="Eau" min="40" max="40" coef="0.5"/>
<critique type="Inflige" element="Air" min="40" max="40" coef="0.5"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="45" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="45" coef="0.5"/>
<critique type="Inflige" element="Eau" min="50" max="50" coef="0.5"/>
<critique type="Inflige" element="Air" min="50" max="50" coef="0.5"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="50" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="50" coef="0.5"/>
<critique type="Inflige" element="Eau" min="55" max="55" coef="0.5"/>
<critique type="Inflige" element="Air" min="55" max="55" coef="0.5"/>
</niveau>
</sort>
<sort id="08" nom="Tout ou Rien" lvl="17" description="Le Tout ou Rien inflige des dégâts à tous les joueurs ou leur rend des PDV s'ils sont chanceux">
<niveau nom="1" pa="6" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="2" max="7" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="2" max="7" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="3" max="14" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="3" max="14" coef="0.5" delai="2"/>
</niveau>
<niveau nom="2" pa="6" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="12" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="12" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="24" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="24" coef="0.5" delai="2"/>
</niveau>
<niveau nom="3" pa="5" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="17" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="17" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="34" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="34" coef="0.5" delai="2"/>
</niveau>
<niveau nom="4" pa="5" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="22" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="22" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="44" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="44" coef="0.5" delai="2"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="4" max="28" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="4" max="28" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="56" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="7" max="56" coef="0.5" delai="2"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="4" max="38" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="4" max="38" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="76" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="7" max="76" coef="0.5" delai="2"/>
</niveau>
</sort>
<sort id="10" nom="Topkaj" lvl="26" description="Topkaj inflige d'importants dégâts de Feu">
<niveau nom="1" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="8" max="20"/>
<critique type="Inflige" element="Feu" min="12" max="24"/>
</niveau>
<niveau nom="2" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="10" max="22"/>
<critique type="Inflige" element="Feu" min="14" max="26"/>
</niveau>
<niveau nom="3" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="12" max="24"/>
<critique type="Inflige" element="Feu" min="16" max="28"/>
</niveau>
<niveau nom="4" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="16" max="28"/>
<critique type="Inflige" element="Feu" min="18" max="30"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="18" max="30"/>
<critique type="Inflige" element="Feu" min="20" max="32"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="19" max="31"/>
<critique type="Inflige" element="Feu" min="22" max="34"/>
</niveau>
</sort>
</classe>
</donnees>
<donnees version="2.2.3.36341.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DamageCalc.xsd">
<classe nom="Cra" auteur="ZDS" description="Archer, attaquant à distance">
<sort id="01" nom="Flèche Magique" lvl="1" description="Occasionne des dommages Feu et vole la portée de la cible">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="1" pomax="7">
<normal type="Inflige" element="Feu" min="9" max="11"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="11" max="13"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="1" pomax="8">
<normal type="Inflige" element="Feu" min="10" max="12"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="12" max="14"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="1" pomax="9">
<normal type="Inflige" element="Feu" min="11" max="13"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="13" max="15"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="1" pomax="10">
<normal type="Inflige" element="Feu" min="12" max="14"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="14" max="16"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="1" pomax="11">
<normal type="Inflige" element="Feu" min="13" max="15"/>
<normal type="Vole" element="PO" min="1" max="1" delai="1"/>
<critique type="Inflige" element="Feu" min="15" max="17"/>
<critique type="Vole" element="PO" min="1" max="1" delai="1"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="1" pomax="12">
<normal type="Inflige" element="Feu" min="20" max="22"/>
<normal type="Vole" element="PO" min="2" max="2" delai="1"/>
<critique type="Inflige" element="Feu" min="24" max="26"/>
<critique type="Vole" element="PO" min="2" max="2" delai="1"/>
</niveau>
</sort>
<sort id="02" nom="Flèche Empoisonnée" lvl="1" description="Occasionne des dommages Neutre sur 2 tours">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="2" pomax="5">
<normal type="Inflige" element="Neutre" min="2" max="3" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="5" delai="2"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="2" pomax="6">
<normal type="Inflige" element="Neutre" min="3" max="4" delai="2"/>
<critique type="Inflige" element="Neutre" min="6" max="6" delai="2"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="2" pomax="7">
<normal type="Inflige" element="Neutre" min="4" max="5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="7" delai="2"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="2" pomax="8">
<normal type="Inflige" element="Neutre" min="5" max="6" delai="2"/>
<critique type="Inflige" element="Neutre" min="8" max="8" delai="2"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="2" pomax="9">
<normal type="Inflige" element="Neutre" min="6" max="7" delai="2"/>
<critique type="Inflige" element="Neutre" min="9" max="9" delai="2"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="2" pomax="10">
<normal type="Inflige" element="Neutre" min="9" max="10" delai="2"/>
<critique type="Inflige" element="Neutre" min="12" max="12" delai="2"/>
</niveau>
</sort>
<sort id="03" nom="Flèche de Recul" lvl="1" description="Occasionne des dommages Air et pousse la cible">
<niveau nom="1" pa="4" cc="30" ec="100" pomin="1" pomax="3">
<normal type="Inflige" element="Air" min="11" max="14"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="13" max="16"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="2" pa="4" cc="30" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Air" min="12" max="15"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="14" max="17"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="3" pa="4" cc="30" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Air" min="13" max="16"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="15" max="18"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="4" pa="4" cc="30" ec="100" pomin="1" pomax="6">
<normal type="Inflige" element="Air" min="14" max="17"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="17" max="20"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="5" pa="4" cc="30" ec="100" pomin="1" pomax="7">
<normal type="Inflige" element="Air" min="15" max="18"/>
<normal type="Pousse" element="Aucun" min="3" max="3"/>
<critique type="Inflige" element="Air" min="18" max="21"/>
<critique type="Pousse" element="Aucun" min="3" max="3"/>
</niveau>
<niveau nom="6" pa="4" cc="30" ec="100" pomin="1" pomax="8">
<normal type="Inflige" element="Air" min="18" max="21"/>
<normal type="Pousse" element="Aucun" min="4" max="4"/>
<critique type="Inflige" element="Air" min="21" max="24"/>
<critique type="Pousse" element="Aucun" min="4" max="4"/>
</niveau>
</sort>
</classe>
<classe nom="Ecaflip" auteur="ZDS" description="Maître du hasard">
<sort id="00" nom="Félintion" lvl="0" description="Vole des points de vie aux ennemis ou soigne les alliés, tout en repoussant la cible">
<niveau nom="1" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="11" max="20" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="21" max="50" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="21" max="25" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="51" max="55" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="2" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="12" max="21" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="23" max="54" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="22" max="26" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="55" max="59" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="3" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="13" max="22" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="25" max="58" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="23" max="27" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="59" max="63" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="4" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="14" max="23" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="27" max="62" target="Ami"/>
<normal type="Pousse" element="Aucun" min="1" max="1"/>
<critique type="Vole" element="Terre" min="24" max="28" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="63" max="67" target="Ami"/>
<critique type="Pousse" element="Aucun" min="1" max="1"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="15" max="24" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="29" max="66" target="Ami"/>
<normal type="Pousse" element="Aucun" min="2" max="2"/>
<critique type="Vole" element="Terre" min="25" max="29" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="67" max="71" target="Ami"/>
<critique type="Pousse" element="Aucun" min="2" max="2"/>
</niveau>
<niveau nom="6" pa="4" cc="50" ec="100" pomin="4" pomax="4">
<normal type="Vole" element="Terre" min="19" max="28" target="Ennemi"/>
<normal type="Soigne" element="Feu" min="36" max="75" target="Ami"/>
<normal type="Pousse" element="Aucun" min="2" max="2"/>
<critique type="Vole" element="Terre" min="29" max="33" target="Ennemi"/>
<critique type="Soigne" element="Feu" min="76" max="80" target="Ami"/>
<critique type="Pousse" element="Aucun" min="2" max="2"/>
</niveau>
</sort>
<sort id="01" nom="Pile ou Face" lvl="1" description="Pile ou Face inflige des dégâts de Terre à un ennemi, mais sur un mauvais coup du destin, peut le soigner">
<niveau nom="1" pa="3" cc="50" ec="100" pomin="0" pomax="5">
<normal type="Inflige" element="Terre" min="4" max="11"/>
<normal type="Soigne" element="Feu" min="1" max="7"/>
<critique type="Inflige" element="Terre" min="4" max="12"/>
<critique type="Soigne" element="Feu" min="1" max="3"/>
</niveau>
<niveau nom="2" pa="3" cc="50" ec="100" pomin="0" pomax="5">
<normal type="Inflige" element="Terre" min="4" max="12"/>
<normal type="Soigne" element="Feu" min="2" max="9"/>
<critique type="Inflige" element="Terre" min="4" max="13"/>
<critique type="Soigne" element="Feu" min="1" max="4"/>
</niveau>
<niveau nom="3" pa="3" cc="50" ec="100" pomin="0" pomax="6">
<normal type="Inflige" element="Terre" min="4" max="13"/>
<normal type="Soigne" element="Feu" min="2" max="9"/>
<critique type="Inflige" element="Terre" min="4" max="14"/>
<critique type="Soigne" element="Feu" min="1" max="4"/>
</niveau>
<niveau nom="4" pa="3" cc="50" ec="100" pomin="0" pomax="6">
<normal type="Inflige" element="Terre" min="4" max="14"/>
<normal type="Soigne" element="Feu" min="3" max="10"/>
<critique type="Inflige" element="Terre" min="4" max="15"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
<niveau nom="5" pa="3" cc="50" ec="100" pomin="0" pomax="7">
<normal type="Inflige" element="Terre" min="4" max="15"/>
<normal type="Soigne" element="Feu" min="4" max="11"/>
<critique type="Inflige" element="Terre" min="4" max="17"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="0" pomax="7">
<normal type="Inflige" element="Terre" min="6" max="19"/>
<normal type="Soigne" element="Feu" min="5" max="12"/>
<critique type="Inflige" element="Terre" min="9" max="24"/>
<critique type="Soigne" element="Feu" min="1" max="5"/>
</niveau>
</sort>
<sort id="04" nom="Bluff" lvl="3" description="Le Bluff inflige aléatoirement des dégâts d'Air ou d'Eau">
<niveau nom="1" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="22" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="22" coef="0.5"/>
<critique type="Inflige" element="Eau" min="25" max="25" coef="0.5"/>
<critique type="Inflige" element="Air" min="25" max="25" coef="0.5"/>
</niveau>
<niveau nom="2" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="25" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="25" coef="0.5"/>
<critique type="Inflige" element="Eau" min="28" max="28" coef="0.5"/>
<critique type="Inflige" element="Air" min="28" max="28" coef="0.5"/>
</niveau>
<niveau nom="3" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="28" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="28" coef="0.5"/>
<critique type="Inflige" element="Eau" min="33" max="33" coef="0.5"/>
<critique type="Inflige" element="Air" min="33" max="33" coef="0.5"/>
</niveau>
<niveau nom="4" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="35" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="35" coef="0.5"/>
<critique type="Inflige" element="Eau" min="40" max="40" coef="0.5"/>
<critique type="Inflige" element="Air" min="40" max="40" coef="0.5"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="45" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="45" coef="0.5"/>
<critique type="Inflige" element="Eau" min="50" max="50" coef="0.5"/>
<critique type="Inflige" element="Air" min="50" max="50" coef="0.5"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="1" pomax="4">
<normal type="Inflige" element="Eau" min="1" max="50" coef="0.5"/>
<normal type="Inflige" element="Air" min="1" max="50" coef="0.5"/>
<critique type="Inflige" element="Eau" min="55" max="55" coef="0.5"/>
<critique type="Inflige" element="Air" min="55" max="55" coef="0.5"/>
</niveau>
</sort>
<sort id="08" nom="Tout ou Rien" lvl="17" description="Le Tout ou Rien inflige des dégâts à tous les joueurs ou leur rend des PDV s'ils sont chanceux">
<niveau nom="1" pa="6" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="2" max="7" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="2" max="7" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="3" max="14" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="3" max="14" coef="0.5" delai="2"/>
</niveau>
<niveau nom="2" pa="6" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="12" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="12" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="24" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="24" coef="0.5" delai="2"/>
</niveau>
<niveau nom="3" pa="5" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="17" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="17" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="34" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="34" coef="0.5" delai="2"/>
</niveau>
<niveau nom="4" pa="5" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="3" max="22" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="3" max="22" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="5" max="44" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="5" max="44" coef="0.5" delai="2"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="4" max="28" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="4" max="28" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="56" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="7" max="56" coef="0.5" delai="2"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="0" pomax="0" zone="C8">
<normal type="Inflige" element="Neutre" min="4" max="38" coef="0.5" delai="2"/>
<normal type="Soigne" element="Feu" min="4" max="38" coef="0.5" delai="2"/>
<critique type="Inflige" element="Neutre" min="7" max="76" coef="0.5" delai="2"/>
<critique type="Soigne" element="Feu" min="7" max="76" coef="0.5" delai="2"/>
</niveau>
</sort>
<sort id="10" nom="Topkaj" lvl="26" description="Topkaj inflige d'importants dégâts de Feu">
<niveau nom="1" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="8" max="20"/>
<critique type="Inflige" element="Feu" min="12" max="24"/>
</niveau>
<niveau nom="2" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="10" max="22"/>
<critique type="Inflige" element="Feu" min="14" max="26"/>
</niveau>
<niveau nom="3" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="12" max="24"/>
<critique type="Inflige" element="Feu" min="16" max="28"/>
</niveau>
<niveau nom="4" pa="5" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="16" max="28"/>
<critique type="Inflige" element="Feu" min="18" max="30"/>
</niveau>
<niveau nom="5" pa="4" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="18" max="30"/>
<critique type="Inflige" element="Feu" min="20" max="32"/>
</niveau>
<niveau nom="6" pa="3" cc="50" ec="100" pomin="1" pomax="5">
<normal type="Inflige" element="Feu" min="19" max="31"/>
<critique type="Inflige" element="Feu" min="22" max="34"/>
</niveau>
</sort>
</classe>
</donnees>
► Afficher le texteFichier XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- effet (commun à "normal" et "critique") -->
<xs:complexType name="effet">
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="element" type="xs:string"/>
<xs:attribute name="min" type="xs:int"/>
<xs:attribute name="max" type="xs:int"/>
<xs:attribute name="target" type="xs:string"/>
<xs:attribute name="delai" type="xs:int"/>
<xs:attribute name="boost" type="xs:string"/>
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="coef" type="xs:decimal"/>
</xs:complexType>
<!-- "normal" et "critique" -->
<xs:element name="normal" type="effet"/>
<xs:element name="critique" type="effet"/>
<!-- "niveau" -->
<xs:element name="niveau">
<xs:complexType>
<xs:sequence>
<xs:element ref="normal" minOccurs="0" maxOccurs="8"/>
<xs:element ref="critique" minOccurs="0" maxOccurs="8"/>
</xs:sequence>
<xs:attribute name="nom" type="xs:int" use="required"/>
<xs:attribute name="pa" type="xs:int" use="required"/>
<xs:attribute name="cc" type="xs:int"/>
<xs:attribute name="ec" type="xs:int"/>
<xs:attribute name="pomin" type="xs:int"/>
<xs:attribute name="pomax" type="xs:int"/>
<xs:attribute name="zone" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- "sort" -->
<xs:element name="sort">
<xs:complexType>
<xs:sequence>
<xs:element ref="niveau" minOccurs="1" maxOccurs="6"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="nom" type="xs:string" use="required"/>
<xs:attribute name="lvl" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- "classe" -->
<xs:element name="classe">
<xs:complexType>
<xs:sequence>
<xs:element ref="sort" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="nom" type="xs:string" use="required"/>
<xs:attribute name="auteur" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
<xs:attribute name="bidon" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- "donnees" -->
<xs:element name="donnees">
<xs:complexType>
<xs:sequence>
<xs:element ref="classe" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- effet (commun à "normal" et "critique") -->
<xs:complexType name="effet">
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="element" type="xs:string"/>
<xs:attribute name="min" type="xs:int"/>
<xs:attribute name="max" type="xs:int"/>
<xs:attribute name="target" type="xs:string"/>
<xs:attribute name="delai" type="xs:int"/>
<xs:attribute name="boost" type="xs:string"/>
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="coef" type="xs:decimal"/>
</xs:complexType>
<!-- "normal" et "critique" -->
<xs:element name="normal" type="effet"/>
<xs:element name="critique" type="effet"/>
<!-- "niveau" -->
<xs:element name="niveau">
<xs:complexType>
<xs:sequence>
<xs:element ref="normal" minOccurs="0" maxOccurs="8"/>
<xs:element ref="critique" minOccurs="0" maxOccurs="8"/>
</xs:sequence>
<xs:attribute name="nom" type="xs:int" use="required"/>
<xs:attribute name="pa" type="xs:int" use="required"/>
<xs:attribute name="cc" type="xs:int"/>
<xs:attribute name="ec" type="xs:int"/>
<xs:attribute name="pomin" type="xs:int"/>
<xs:attribute name="pomax" type="xs:int"/>
<xs:attribute name="zone" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- "sort" -->
<xs:element name="sort">
<xs:complexType>
<xs:sequence>
<xs:element ref="niveau" minOccurs="1" maxOccurs="6"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="nom" type="xs:string" use="required"/>
<xs:attribute name="lvl" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- "classe" -->
<xs:element name="classe">
<xs:complexType>
<xs:sequence>
<xs:element ref="sort" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="nom" type="xs:string" use="required"/>
<xs:attribute name="auteur" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
<xs:attribute name="bidon" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- "donnees" -->
<xs:element name="donnees">
<xs:complexType>
<xs:sequence>
<xs:element ref="classe" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
► Afficher le texteFichier AU3
#include <Array.au3>
Global $damageCalc_donnees = @ScriptDir & "\" & "DamageCalc" & "\" & "DamageCalc.xml" ; XML : Données du DamageCalc
Global $damageCalc_schema = @ScriptDir & "\" & "DamageCalc" & "\" & "DamageCalc.xsd" ; XSD : Schéma des données du DamageCalc
Local $classeToGet = "Cra", $sortToGet = "", $niveauToGet = ""
Local $liste[1][2] = [[0,""]], $xml_present = True, $XML = ObjCreate("Microsoft.XMLDOM")
If Not (IsObj($XML) And FileExists($damageCalc_donnees)) Then $xml_present = False
If $xml_present Then
If checkXMLwithXSD($damageCalc_donnees,$damageCalc_schema) Then ; Si valide
$XML.Load($damageCalc_donnees)
Local $classes = $XML.SelectNodes("/donnees/classe")
For $classe In $classes ; On boucle sur les classes
If $classeToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $classe.GetAttribute("nom")
$liste[$liste[0][0]][1] = $classe
ElseIf $classeToGet = $classe.GetAttribute("nom") Then
Local $sorts = $classe.SelectNodes("sort")
For $sort In $sorts ; On boucle sur les sorts de la classe selectionnée
If $sortToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $sort.GetAttribute("nom")
$liste[$liste[0][0]][1] = $sort
ElseIf $sortToGet = $sort.GetAttribute("nom") Then
Local $niveaux = $sort.SelectNodes("niveau")
For $niveau In $niveaux ; On boucle sur les niveaux du sort selectionné
If $niveauToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $niveau.GetAttribute("nom")
$liste[$liste[0][0]][1] = $niveau
ElseIf $niveauToGet = $niveau.GetAttribute("nom") Then
;
EndIf
Next
EndIf
Next
EndIf
Next
EndIf
EndIf
_ArrayDisplay($liste)
Func checkXMLwithXSD($damageCalc_donnees,$damageCalc_schema="")
; $damageCalc_schema est presque inutile, car normalement on le trouve dans la balise :
; <donnees version="..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DamageCalc.xsd">
Return True
EndFunc
Global $damageCalc_donnees = @ScriptDir & "\" & "DamageCalc" & "\" & "DamageCalc.xml" ; XML : Données du DamageCalc
Global $damageCalc_schema = @ScriptDir & "\" & "DamageCalc" & "\" & "DamageCalc.xsd" ; XSD : Schéma des données du DamageCalc
Local $classeToGet = "Cra", $sortToGet = "", $niveauToGet = ""
Local $liste[1][2] = [[0,""]], $xml_present = True, $XML = ObjCreate("Microsoft.XMLDOM")
If Not (IsObj($XML) And FileExists($damageCalc_donnees)) Then $xml_present = False
If $xml_present Then
If checkXMLwithXSD($damageCalc_donnees,$damageCalc_schema) Then ; Si valide
$XML.Load($damageCalc_donnees)
Local $classes = $XML.SelectNodes("/donnees/classe")
For $classe In $classes ; On boucle sur les classes
If $classeToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $classe.GetAttribute("nom")
$liste[$liste[0][0]][1] = $classe
ElseIf $classeToGet = $classe.GetAttribute("nom") Then
Local $sorts = $classe.SelectNodes("sort")
For $sort In $sorts ; On boucle sur les sorts de la classe selectionnée
If $sortToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $sort.GetAttribute("nom")
$liste[$liste[0][0]][1] = $sort
ElseIf $sortToGet = $sort.GetAttribute("nom") Then
Local $niveaux = $sort.SelectNodes("niveau")
For $niveau In $niveaux ; On boucle sur les niveaux du sort selectionné
If $niveauToGet = "" Then
$liste[0][0] = $liste[0][0] + 1
ReDim $liste[$liste[0][0]+1][2]
$liste[$liste[0][0]][0] = $niveau.GetAttribute("nom")
$liste[$liste[0][0]][1] = $niveau
ElseIf $niveauToGet = $niveau.GetAttribute("nom") Then
;
EndIf
Next
EndIf
Next
EndIf
Next
EndIf
EndIf
_ArrayDisplay($liste)
Func checkXMLwithXSD($damageCalc_donnees,$damageCalc_schema="")
; $damageCalc_schema est presque inutile, car normalement on le trouve dans la balise :
; <donnees version="..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DamageCalc.xsd">
Return True
EndFunc
Non valide, car l'attribut "bidon" n'existe dans aucune balise "classe".
Si on enlève la ligne <xs:attribute name="bidon" type="xs:string" use="required"/> du fichier XSD, le fichier devient valide par rapport au schéma.




