我在一个项目中使用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
我认为这是不工作的原因,但我不确定为什么。
我发现您的代码中有一件事可能是错误的,或者可能是因为您的示例不够好,那就是您在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>