2011-05-02 126 views
1

我使用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 

我認爲有一些原因,這是行不通的,但我不能確定,爲什麼。

+1

請添加到您的XML示例,顯示從根節點到您的目標節點。我們並不需要所有的東西,只是看到了這條道路和可疑的XMLNS。 – 2011-05-02 02:31:10

+0

我在用'''node'添加元素屬性時出現問題'''] ='''''''''''node.set_attribute('','')似乎正在工作更好,但還沒有得到它在我的irb控制檯之外實際工作。 – JackChance 2016-03-02 21:46:47

回答

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>