Nokogiri:查找和XML元素然后添加子元素

时间:2014-03-06 11:30:58

标签: ruby-on-rails xml nokogiri

我有一个xml文档,我想在名为'InitgPty'的元素下添加子元素,我试图按如下方式添加:

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上得到NoM​​ethodError。这是我第一次使用XML和nokogiri,但对我来说,是

生成的XML
doc = Nokogiri::XML(file_contents)
看起来很奇怪。以下是rails控制台中该行输出的片段:

#<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是由其他原因造成的?在此问题上的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试使用CSS选择器。这也适用于XML文档:

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