2009-09-05 5 views
4

J'utilise nokogiri avec un document XML qui ressemble à ceci:Comment gérer les caractères échappées dans les expressions XPath pour Nokogiri

<songs> 
    <song> 
    <artist>Juana Molina</artist> 
    <album>Un Dia</album> 
    <track>8</track> 
    <title>Dar (Qu&#233; Dif&#237;cil)</title> 
    <rating>5</rating> 
    <filename>\Juana Molina\Un Dia\08 - Juana Molina - Dar (Qu&#233; Dif&#237;cil).mp3</filename> 
    </song> 
<songs> 

Lorsque je tente de trouver des chansons qui contiennent des caractères d'échappement, je ne obtenir quoi que ce soit de retour avec la requête XPath suivante (quel que soit si je fais ou n'échappe pas à la chaîne de nom de fichier utilisé dans la requête)

file = File.new("songs.xml") 
parser = Nokogiri::XML(file) 

filename = "\Juana Molina\Un Dia\08 - Juana Molina - Dar (Qué Difícil).mp3" 

xm = Builder::XmlMarkup.new 
filename = xm.text! filename 
# => \Juana Molina\Un Dia\08 - Juana Molina - Dar (Qu&#233; Dif&#237;cil).mp3 

nodes = parser.root.xpath('//songs/song[filename="'+filename+'"]') 
puts nodes 

Quelle est la bonne façon de représenter les caractères échappées dans la requête XPath?

+0

Est-ce que ça marche pour vous? Avez-vous déjà une solution pour cela? Partagez s'il vous plait – Jirapong

Répondre

1

Il est difficile pour MRI version 1.8.x d'utiliser Unicode, mais l'idée devrait être de désactiver votre chaîne en premier.

require 'cgi' 

unscaped_str = CGI.unescapeHTML(File.read('songs.xml')) 

Je crois aussi que vous devez exécuter ou irb rubis avec ku afin de forcer l'IRM à utiliser unicode.

Espérons que cela aide.

Questions connexes