2009-09-05 69 views
4
我使用引入nokogiri与XML文档看起来像这样

如何处理XPath表达式中转义字符引入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> 

当我试图找到包含转义字符的歌曲,我不取得任何具有以下XPath查询(不管我做什么或不逃避的文件名字符串中的查询中使用的)

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 

什么是代表XPath查询转义字符正确的方法是什么?

+0

它适合你吗?你有这个解决方案吗?请分享 – Jirapong 2009-09-08 17:43:21

回答

1

MRI版本1.8.x很难使用Unicode,但这个想法应该首先避开你的字符串。

require 'cgi' 

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

我也相信你需要运行IRB或以迫使MRI使用unicode与-ku红宝石。

希望这会有所帮助。

相关问题