2009-09-05 68 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紅寶石。

希望這會有所幫助。

相關問題