2012-03-19 2 views
3

J'essaye d'analyser un document XML qui stocke des données pour une carte dans mon jeu 2D. J'essaye de prendre cette étape par étape, j'ai chargé le dossier, crée un nouvel analyseur de document, et ai choisi une étiquette de début et un attribut que je veux tirer. Cependant quand je vérifie pour voir ce que la valeur de l'attribut devrait être (25) il sort comme zéro. Me dire qu'il me manque quelque chose et que je ne tire pas la valeur XML.Analyse XML en D

Ceci est le fichier XML en cours d'analyse: http://pastebin.com/tpUU1Wtv

void LoadMap(string filename) 
{ 
    enforce(filename != "" , "Filename is invalid!"); 

    xmlData = cast(string) read(filename); 

    enforce(xmlData != "", "Read file Failed!"); 

} 

void ParseMap() 
{ 
    auto xml = new DocumentParser(xmlData); 

    xml.onStartTag["map"] = (ElementParser e) 
    { 
     mapWidth = to!int(e.tag.attr["width"]); 
    }; 
    xml.parse(); 
    writeln("Map Width: ", mapWidth); 
} 
+0

et si vous ne convertissez pas en 'int' qu'est-ce que' e.tag.attr ["width"] 'hold (et quels autres attr sont là) –

+0

Il contient une chaîne vide en ce qui concerne writeln. Sous la balise de la carte: RedShft

+0

Peut-être ajouter "e.parse();" après "mapWidth = ..." ligne? comme dans http://dlang.org/phobos/std_xml.html – Raxillan

Répondre

3

Le module xml semble être un peu buggé, une alternative est en cours d'élaboration, je crois.

La raison pour laquelle votre code ne fonctionne pas est que, pour une raison quelconque, l'analyseur ignore la balise externe qui l'entoure. Ce qui dans votre cas est "carte". Si vous enveloppez votre tag de carte dans une étiquette fictive, tout à coup cela fonctionne.

<dummy> 
    <map...> 
    ... 
    </map> 
</dummy> 
+0

Cela a fait l'affaire. Merci! – RedShft

+0

L'alternative (qui deviendra probablement std.xml2) se trouve ici: http://dsource.org/projects/xmlp Utiliser cela est probly moins frustrant que de contourner les bugs de std.xml. – jpf

+0

2017, maintenant std.xml encore buggé, donc il n'y a que moi sans y croire. – qinxian

1

L'utilisation de YAML est-elle une option? D-YAML?

+0

Je ne suis pas sûr de ce que c'est. J'ai fini par utiliser une bibliothèque XML personnalisée à cause du bug dont parlait fwend. – RedShft

+0

YAML n'est pas un langage de balisage. C'est une alternative agréable, humaine et lisible par machine à XML – RedMage