我正在尝试使用Nokogiri替换SVG标签,但是我似乎找不到替换该标签的方法。
我的尝试
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h
虽然找到ID为xml = Nokogiri.parse sample.svg
xml.search("//xmlns:g[@id='Placements']")
的标签,但是用另一个标签替换标签的方法是什么?
我尝试过:
Placements
返回错误:
xml = Nokogiri.parse sample.svg
xml.search("//xmlns:g[@id='Placements']").replace '<g id=example></g>'
如何使用Nokogiri替换SVG中的标签?
答案 0 :(得分:1)
https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/NodeSet
为您提供可对该节点集执行的所有操作的列表。问题是您要彻底改变其中的所有内容吗?那将包括嵌套在其中的所有节点。仅仅检查您只会得到一个结果,因为搜索允许找到多个节点并将其放入一个节点集中进行查看。
如果您确定自己想去的地方,并且想要完全更改/删除节点集,那么
xml.search("//xmlns:g[@id='Placements']").before('<g id=example></g>')
然后删除您选择的集合:
xml.search("//xmlns:g[@id='Placements']").delete
让我感到困扰的是,它给了您一个节点集,这意味着您拥有多个标签。尝试做:
xml.search("//xmlns:g[@id='Placements']").length
为确保您具有所需的单个标记。正在执行:
i = 0
xml.search("//xmlns:g[@id='Placements']").each do |node|
puts node
puts i
i += 1
end
可以让您更好地了解所需的特定节点。然后,借助所需的特定节点的索引,只需使用以下命令即可选择它:
xml.search("//xmlns:g[@id='Placements']")[i]
更改i的具体索引位置。 我看到的问题是您仍然不在您要更改的单个节点上,因为它声称要向您返回节点集。
一旦发现替换的奇异节点应该起作用: https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node
答案 1 :(得分:1)
如果要将一个ID更改为另一个ID,只需分配它即可。
require 'nokogiri'
doc = Nokogiri::XML(File.read("sample.svg"))
doc.css('g#Placements')[0]["id"] = "example"
File.write("new.svg", doc.to_xml)