Nokogiri XML: 尝试将图像 url 从元素移动到属性
Nokogiri XML: trying to move image url from element to attribute
我正在尝试将大量 urls (580) 从图像元素内部移动到我的 [=40= 中图像元素 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 的研究,我尝试了很多不同的变体,下面是我最近的尝试:(不确定我在这里是否正确使用 "each"。我是 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>
这对我有用:
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
returns 需要通过将属性 url
设置为 text
的值来单独修改的 Nokogiri 元素数组, 然后擦除元素的 content
。请注意,您使用 text
读取值并使用 content
.
设置它
我正在尝试将大量 urls (580) 从图像元素内部移动到我的 [=40= 中图像元素 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 的研究,我尝试了很多不同的变体,下面是我最近的尝试:(不确定我在这里是否正确使用 "each"。我是 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>
这对我有用:
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
returns 需要通过将属性 url
设置为 text
的值来单独修改的 Nokogiri 元素数组, 然后擦除元素的 content
。请注意,您使用 text
读取值并使用 content
.