В Ruby 1.9.2 и Rails 3.0.1 у меня есть эта строка:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note><div>this is new note content</div>
<div></div>
<div></div>
<div><br clear="none"/><en-media width="640" height="480" style="cursor: url('/images/magnify.cur'),crosshair;" hash="6d7b2488610acd5d1269cb466567dcc6" type="image/jpeg"></en-media></div>
<div></div>
<div>some more text</div>
<div></div>
<div></div><br/><en-media hash="da3ad4553701959b5c5620fb609af9c4" type="image/jpeg"/></en-note>
В строке есть два тега en-media
, каждый из которых имеет атрибут hash
.
У меня также есть массив значений хеш-функции. Мне нужно использовать эти хэш-значения для замены соответствующих тегов en-media
.
Например, первый элемент в массиве - "6d7b2488610acd5d1269cb466567dcc6"
. Мне нужно использовать это значение, чтобы заменить эту подстроку из строки:
<en-media width="640" height="480" style="cursor: url('/images/magnify.cur'),crosshair;" hash="6d7b2488610acd5d1269cb466567dcc6" type="image/jpeg"></en-media>
Как я могу это сделать?
Я пытался использовать Нокогири следующим образом:
string.xpath("//*[@*[hash]]")
Но я получаю такой результат:
--- !ruby/object:Nokogiri::XML::NodeSet
document: !ruby/object:Nokogiri::HTML::Document
decorators:
errors:
- !ruby/exception:Nokogiri::XML::SyntaxError
message: Tag en-note invalid
code: 801
column: 9
domain: 5
file:
int1: 0
level: 2
line: 3
str1: en-note
str2:
str3:
- !ruby/exception:Nokogiri::XML::SyntaxError
message: Tag en-media invalid
code: 801
column: 170
domain: 5
file:
int1: 0
level: 2
line: 6
str1: en-media
str2:
str3:
- !ruby/exception:Nokogiri::XML::SyntaxError
message: Tag en-media invalid
code: 801
column: 84
domain: 5
file:
int1: 0
level: 2
line: 10
str1: en-media
str2:
str3:
node_cache:
- !ruby/object:Nokogiri::XML::Element {}
- !ruby/object:Nokogiri::XML::Element {}