如何使用Nokogiri在XML中添加节点属性



我在一个项目中使用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>

相关内容

  • 没有找到相关文章

最新更新