Ruby 如何使用Nokogiri移动XML中的节点?
我想将nokogiri中的节点移动到父节点 我有这个:Ruby 如何使用Nokogiri移动XML中的节点?,ruby,xml,nokogiri,Ruby,Xml,Nokogiri,我想将nokogiri中的节点移动到父节点 我有这个: <root> <resource> <photo_1> <photo_url> img_src </photo_url> </photo_1> <adress> c/street ... </adress> &l
<root>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
...
但不起作用。这样就可以了:
doc = Nokogiri::XML(xml)
doc.xpath('//photo_url').each do |photo|
old_parent = photo.xpath('ancestor::*[1]').first
resource = photo.xpath('ancestor::resource').first
photo.parent = resource
old_parent.remove
end
我会这样做的。使用XML:
xml = <<EOT
<root>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
</root>
EOT
输出如下所示:
>> <?xml version="1.0"?>
>> <root>
>> <resource>
>> <photo_url>
>> img_src
>> </photo_url>
>> <adress>
>> c/street ...
>> </adress>
>> </resource>
>>
>> <resource>
>> <photo_url>
>> img_src
>> </photo_url>
>> <adress>
>> c/street ...
>> </adress>
>> </resource>
>> </root>
>
>>
>>
>>
>>img_src
>>
>>
>>c/街。。。
>>
>>
>>
>>
>>
>>img_src
>>
>>
>>c/街。。。
>>
>>
>>
所以您试图通过仅删除节点来转换文档?是的,就是这样,我想移到更高一级,我不知道替换。这确实更容易,+1
xml = <<EOT
<root>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
<resource>
<photo_1>
<photo_url>
img_src
</photo_url>
</photo_1>
<adress>
c/street ...
</adress>
</resource>
</root>
EOT
require 'nokogiri'
doc = Nokogiri::XML(xml)
doc.search('photo_url').each do |n|
n.parent.replace n
end
puts doc.to_xml
>> <?xml version="1.0"?>
>> <root>
>> <resource>
>> <photo_url>
>> img_src
>> </photo_url>
>> <adress>
>> c/street ...
>> </adress>
>> </resource>
>>
>> <resource>
>> <photo_url>
>> img_src
>> </photo_url>
>> <adress>
>> c/street ...
>> </adress>
>> </resource>
>> </root>