如何使用Nokogiri在XML中添加节点属性?
问题描述:
我使用Ruby 1.8.7作为项目。如何使用Nokogiri在XML中添加节点属性?
我需要能够为它解析和修改一部分XML代码,而且我遇到了一些问题。我正在使用Nokogiri进行解析。
我也行:
<linking-phrase-appearance id="1JDLZ0609-JFP4ZP-TH" x="346" y="207" width="39" height="14"/>
我需要将其更改为:
<linking-phrase-appearance id="1JDLZ0609-JFP4ZP-TH" x="346" y="207" width="39" height="14" font-color="255 0 0 255"/>
我有找到正确的线路更改代码,但是当我改变它什么也没写出来到输出文件。
这是我用来改变属性的代码:
# middle_node = id of line that needs to be changed (is unique to the line)
appearance = @xml.xpath("/xmlns:cmap/xmlns:map/xmlns:linking-phrase-appearance-list")
appearance.each do |node|
if node['id'] == middle_node
node['font-color'] = '255,0,0,255'
end
end
我认为有一些原因,这是行不通的,但我不能确定,为什么。
答
我发现在代码中可能有错,或者可能是因为您的示例不够好,您在XPath中使用的是XML名称空间,但标记本身没有名称空间。
此示例代码显示您处于正确的轨道上。我认为你的XPath是错误的,但没有更多的XML文件我不知道肯定:
require "nokogiri"
xml = '<xml><linking-phrase-appearance id="1JDLZ0609-JFP4ZP-TH" x="346" y="207" width="39" height="14"/></xml>'
target_id = '1JDLZ0609-JFP4ZP-TH'
doc = Nokogiri::XML(xml)
doc.search(%Q{//linking-phrase-appearance[@id="#{ target_id }"]}).each do |n|
n['font-color'] = '255,0,0,255'
end
puts doc.to_xml
>> <?xml version="1.0"?>
>> <xml>
>> <linking-phrase-appearance id="1JDLZ0609-JFP4ZP-TH" x="346" y="207" width="39" height="14" font-color="255,0,0,255"/>
>> </xml>
请添加到您的XML示例,显示从根节点到您的目标节点。我们并不需要所有的东西,只是看到了这条道路和可疑的XMLNS。 – 2011-05-02 02:31:10
我在用'''node'添加元素属性时出现问题'''] ='''''''''''node.set_attribute('','')似乎正在工作更好,但还没有得到它在我的irb控制台之外实际工作。 –
JackChance
2016-03-02 21:46:47