4

我正在使用 nokogiri 和一个看起来像这样的 xml 文档:

<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 查询中表示转义字符的正确方法是什么?

4

1 回答 1

1

MRI 版本 1.8.x 很难使用 Unicode,但想法应该是首先对字符串进行转义。

require 'cgi'

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

我还相信您需要使用 -KU 运行 irb 或 ruby​​ 以强制 MRI 使用 unicode。

希望这可以帮助。

于 2009-09-06T17:52:55.733 回答