2014-03-06 110 views
0

我有一個xml文檔,我想名爲「InitgPty」的元素添加子元素,我試圖這樣做如下:引入nokogiri:查找和XML元素,然後添加子元素

filename = "#{payment.updated_at.strftime("%Y%m%d")}.xml" 
file_contents = File.read("#{filename}") 

doc = Nokogiri::XML(file_contents) 

initgpty = doc.at_xpath("//InitgPty") 
first_id_tag = Nokogiri::XML::Node.new "Id", doc 
initgpty.add_next_sibling(first_id_tag) 

問題是

initgpty = doc.at_xpath("//InitgPty") 

返回nil,所以我過得好.add_next_sibling一個NoMethodError。這是我第一次使用XML和nokogiri,但對我來說,生成的XML由

doc = Nokogiri::XML(file_contents) 

看起來很奇怪。下面是從鐵軌控制檯是什麼線路輸出的一個片段:

#<Nokogiri::XML::Element:0x58d9582 name="InitgPty" namespace=#<Nokogiri::XML::Namespace:0x58ce1be href="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02"> children=[#<Nokogiri::XML::Text:0x58d92d0 "\n  ">, #<Nokogiri::XML::Element:0x58d9212 name="Nm" namespace=#<Nokogiri::XML::Namespace:0x58ce1be href="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02"> children=[#<Nokogiri::XML::Text:0x58d8e84 "B8S Chatter Creators">]>, #<Nokogiri::XML::Text:0x58d8d12 "\n  ">]> 

這是正確的,並且NoMethodError是由別的原因引起的?任何關於此事的幫助都將不勝感激。

+0

原始XML的外觀如何? 'InitgPty'元素位於'urn:iso:std:iso:20022:tech:xsd:pain.008.003.02'命名空間中,因此您可能需要將其包含在XPath查詢中。 – matt

+0

'doc.css('InitgPty')。first'? – Matt

+0

@Matt我可以在xml文檔上使用css嗎? – SoSimple

回答

0

嘗試使用CSS選擇器。這也適用於XML文檔:

doc.css('InitgPty').first 
#should return the first element named InitgPty