Analyse XML en Ruby
Je suis à l'aide d'un REXML Ruby analyseur de parser un fichier XML. Mais sur un 64 bits AIX boîte avec 64 bits Ruby, j'obtiens l'erreur suivante:
REXML::ParseException: #<REXML::ParseException: #<RegexpError: Stack overflow in
regexp matcher:
/^<((?>(?:[\w:][\-\w\d.]*:)?[\w:][\-\w\d.]*))\s*((?>\s+(?:[\w:][\-\w\d.]*:)?[\w:][\-\w\d.]*\s*=\s*(["']).*?)*)\s*(\/)?>/mu>
L'appel pour le même est quelque chose comme ceci:
REXML::Document.new(File.open(actual_file_name, "r"))
Quelqu'un a une idée sur comment résoudre ce problème?
Est que votre animal de regex ou est-il de REXML?
C'est à partir de REXML. Ce n'est pas une regex que j'ai écrit. Je suis juste en utilisant REXML pour analyser un document xml
Donc, REXML est en donnant que "la Bête" d'une regex" 😀
C'est à partir de REXML. Ce n'est pas une regex que j'ai écrit. Je suis juste en utilisant REXML pour analyser un document xml
Donc, REXML est en donnant que "la Bête" d'une regex" 😀
OriginalL'auteur Ricketyship | 2012-01-10
Vous devez vous connecter pour publier un commentaire.
J'ai eu quelques problèmes pour REXML, il ne semble pas être le plus mature de la bibliothèque. Habituellement j'utilise Nokogiri pour le Rubis d'analyse XML choses, il devrait être plus rapide et plus stable que REXML. Après l'avoir installé avec
sudo gem install nokogiri
, vous pouvez utiliser quelque chose comme cela pour obtenir un DOM exemple:La documentation sur le site officiel est également bien meilleure que celle de REXML, à mon humble avis.
Le meilleur endroit pour signaler ce serait le Rubis le bugtracker, alors.
Merci.. rapport là-bas alors...
pourrait aussi bien être que votre fichier XML est tout simplement trop grand ou trop profondément imbriqués. Peut-être que vous devriez essayer certains flux XML à parser, dans ce cas.
Alors pourquoi est-ce que le même fichier est analysé en 32 bits ruby? Idéalement parlant, 64 bits ruby devrait être capable de toutes les activités réalisées par un 32 bits, ruby bibliothèque. Est-ce que ruby 64 bits a certaines limites? Si oui, est-il une documentation pour la même chose?
OriginalL'auteur Niklas B.
J'ai presque immédiatement trouvé la réponse.
La première chose que je fis fut de chercher dans le ruby code source de l'erreur est générée.
J'ai trouvé que les regex.h en était responsable.
Dans la regex.h, le flux de code est quelque chose comme ceci:
Maintenant, le problème ici est RE_DUP_MAX. Sur AIX en boîte, le même constant a été défini quelque part dans /usr/include.
J'ai cherché et trouvé dans
Je ne sais pas lequel des trois est utilisé(probablement NLregexp.h).
Dans ces en-têtes, la valeur de RE_DUP_MAX a été mis à 255! Donc, il y a un bouchon placé sur le nombre de répétitions d'une regex!
En bref, la raison est la compilation de prendre le système défini de valeur que celle que nous définissons dans la regex.h!
Également, cela répond à ma question que j'avais demandé récemment:
Regex limite en ruby 64 bits aix compilation
Je n'étais pas en mesure de répondre immédiatement car j'ai besoin d'avoir min de 100 points de réputation 😀 😀
Cheers!
OriginalL'auteur