2010-01-26 20 views
0

Est-ce que quelqu'un connaît une astuce pour ignorer upper/lower/camelcase sur les noms et les attributs de noeud XML? Un exemple rapide: Je donne un fichier XML à mon client qui contient un attribut XML nommé fooID mais le client pourrait changer le XML, et - ne pas être au courant de la modification des majuscules/minuscules ou ajouter un attribut sous 'fooid'. Naturellement mon analyseur (dans AS3) ignorerait l'attribut tout en minuscules. Notez que la valeur contenue dans fooID n'est pas le problème ici, mais le nom de l'attribut lui-même. Des idées?Ignorer le cas des noms de noeud et des attributs E4X?

+1

Je doute. XML est par nature sensible à la casse, donc 'fooid' est aussi différent de' fooID' que de 'potato193638_lemons'. Vous auriez besoin d'une étape de post-traitement pour renommer chaque nœud dans le cas préféré. – bobince

+0

thnx bobince je pensais autant. il serait probablement possible de traiter la chaîne xml brute et de vérifier chaque balise xml (par exemple via regexp) et de convertir son cas. mais ce serait un sacré boulot pour s'assurer que les fautes de frappe sont ignorées. ce serait vraiment cool si les classes AS3 XML et XMLList avaient une propriété comme 'ignoreCase'! –

+0

duplicata possible de [Comment obtenir des éléments insensibles à la casse en XML] (http://stackoverflow.com/questions/868850/how-to-get-case-insensitive-elements-in-xml) –

Répondre

0

Vous pouvez écrire votre propre analyseur XML (l'ancien, pré-E4X), dans lequel vous parcourez tous les nœuds récursivement, recherchez les noms de nœuds de votre choix, puis écrivez un graphique d'objet ou stockez l'analysé XML d'autres façons. Cela implique de tester chaque nom de noeud par rapport à tout nom de noeud autorisé (pseudo code: if nodename == "fooID" then do something with the node). Parce que vous essayez sur chaque nœud, vous pouvez normaliser l'appariement en minuscules à la fois nodename et "fooID".

Génial, mais fait l'affaire.

1

utilisation RegExp dans votre requête XML, et l'ont insensible à la casse

liste de const... XMLList = xml * (@ name.toString() recherche (nouveau RegExp ("bonjour", "i"))! = -1);

0

Cela semble fonctionner pour moi:

var lowerCasePropertyName:String = propertyName.toLowerCase(); 
var xmlItem:XMLList = xml.*.(attribute("name").toString().toLowerCase()==lowerCasePropertyName);