我正在使用Ruby 1.8.7进行项目。
我需要能够为它解析和修改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
我认为有一些原因导致这不起作用,但我不确定为什么。
答案 0 :(得分:1)
我看到的一件事可能在您的代码中出错,或者可能是因为您的示例不够好,您是在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>