我正在尝试将大量网址(580)从图像元素内部移动到我的XML文档中图像元素的url属性的引号内。
以下是一个例子:
我现在所拥有的:
<image type="photo" url="">http://contentadmin.livebookings.com/dynamaster/image_archive/original/f24c60a52e7ac0874be57e51bce30726.jpg</image>
我想将其更改为:
<image type="photo" url="http://contentadmin.livebookings.com/dynamaster/image_archive/original/f24c60a52e7ac0874be57e51bce30726.jpg"></image>
我仔细查看了修改部分下的Nokogiri文档:http://www.nokogiri.org/tutorials/modifying_an_html_xml_document.html但他们并没有专门处理属性。
我还研究了之前的Stack Overflow问题:Setting an attribute in a Nokogiri::XML::NodeSet with css
根据我对Nokogiri的研究,我尝试了很多不同的变化,下面是我的最新尝试:(不确定我是否正在使用&#34;每个&#34;在这里正确。我是css选择器Nokogiri对我来说似乎比xpath更直接。
require 'nokogiri'
f = File.read('xml-output-no-error-version.xml')
doc = Nokogiri::XML(f)
actual_links = doc.css('image').text
link_elements = doc.css('image')
link_attributes = link_elements["url"]
actual_links.each do |l|
l.link_attributes
end
File.write('new-xml-output.xml', doc.to_xml)
我在控制台中收到此错误:
ruby nokogiri.rb
nokogiri.rb:11:in `[]': no implicit conversion of String into Integer (TypeError)
from nokogiri.rb:11:in `<main>'
以下是我的XML文档中更完整的代码段:
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<language>en</language>
<listing>
<id>43927</id>
<cell1>Andover House</cell1>
<cell2>28-30 Camperdown</cell2>
<cell3>Great Yarmouth</cell3>
<cell4>NR30 3JB</cell4>
<cell5>GB</cell5>
<cell6>52.6003767</cell6>
<cell7>1.7339649</cell7>
<cell8>+44 1493843490</cell8>
<category>Restaurants - British</category>
<image type="photo" url="">http://contentadmin.livebookings.com/dynamaster/image_archive/original/f24c60a52e7ac0874be57e51bce30726.jpg</image>
<cell11>http://www.bookatable.co.uk/andover-house-great-yarmouth-norfolk
</cell11>
</listing>
...
</listings>
答案 0 :(得分:1)
这对我有用:
require 'nokogiri'
f = File.read('xml-output-no-error-version.xml')
doc = Nokogiri::XML(f)
link_elements = doc.css('image')
link_elements.each do |l|
l['url'] = l.text
l.content = ''
end
File.write('new-xml-output.xml', doc.to_xml)
非常简短地调用css
会返回一个Nokogiri元素数组,需要通过将属性url
设置为text
的值来单独修改,然后通过消除元素的content
。请注意,您使用text
阅读了该值,并使用content
设置了它。