Ruby on rails Nokogiri:查找XML元素,然后添加子元素

Ruby on rails Nokogiri:查找XML元素,然后添加子元素,ruby-on-rails,xml,nokogiri,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::

我有一个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,因此我得到一个命名错误。添加下一个兄弟姐妹。这是我第一次同时使用XML和nokogiri,但对我来说

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      ">]>
#

这是正确的吗?命名错误是由其他原因引起的?在这件事上任何帮助都将不胜感激

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

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

原始XML看起来像什么?
InitgPty
元素位于
urn:iso:std:iso:20022:tech:xsd:pain.008.003.02
名称空间中,因此您可能需要将其包含在XPath查询中。关于
doc.css('InitgPty')如何。首先
?@Matt我可以在xml文档上使用css吗?我认为可以,但您必须验证它。如果返回
nil
则XML文档中没有此类元素。@Matt现在似乎找到了正确的元素。看起来子元素没有正确创建,但至少我找到了正确的位置。我可以从这里进一步调试。谢谢你的帮助!