如何添加元素?
回答
这是比这更容易了很多:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<root>
<node>
</node>
</root>
EOT
doc.at('node').children = '<child>foo</child>'
doc.to_xml
# => "<?xml version=\"1.0\"?>\n<root>\n <node><child>foo</child></node>\n</root>\n"
children=
是足够聪明,看你传递什么和会做肮脏的工作适合你。所以只需使用一个字符串来定义新节点并告诉Nokogiri在哪里插入它。
doc.at('node').class # => Nokogiri::XML::Element
doc.at('//node').class # => Nokogiri::XML::Element
doc.search('node').first # => #<Nokogiri::XML::Element:0x3fd1a88c5c08 name="node" children=[#<Nokogiri::XML::Text:0x3fd1a88eda3c "\n ">]>
doc.search('//node').first # => #<Nokogiri::XML::Element:0x3fd1a88c5c08 name="node" children=[#<Nokogiri::XML::Text:0x3fd1a88eda3c "\n ">]>
search
是通用的 “找点” 的方法,将采取任何CSS或XPath选择。 at
相当于search('some selector').first
。 at_css
和at_xpath
是at
的具体等同物,就像css
和xpath
是search
。如果你想使用特定的版本,但通常我使用通用版本。
不能使用:
targets
将[]
(实际上是一个空节点集),如果./target
不会在DOM存在。您不能追加节点到[]
,因为NodeSet不知道您在说什么,导致undefined method 'children=' for nil:NilClass (NoMethodError)
异常。
相反,您必须找到要插入节点的特定位置。 at
是很好的,因为它找到了第一个位置。当然,如果你想查找多个地方来修改某些东西,请使用search
,然后迭代返回的NodeSet并根据返回的各个节点进行修改。
这是不可能做的xpath?事情是,我在@xml上收到一个
无论您使用'xpath'或'css'还是'at'或任何的“查找节点”方法。重要的是你如何添加它。 –
我正在选择你的答案,因为你提供了很多有用的信息,但请检查答案,你会发现这样做的缺点吗? –
我结束这样做,工作正常。
targets = @xml.xpath("./target")
if targets.empty?
targets << Nokogiri::XML::Node.new('target', @xml)
@xml.add_child(targets.first)
end
- 1. 如何添加元素的元组
- 2. 如何添加类追加TD元素
- 3. 添加元素
- 4. 添加元素
- 5. 如何添加DTD元素如果我不知道子元素
- 6. 使用DSL,如何在添加父元素时按规则添加子元素
- 7. 如何使用jquery在添加元素的末尾添加元素?
- 8. 如何将元素添加到DOM
- 9. 如何使用jQuery添加DOM元素?
- 10. 如何添加元素泛型集合
- 11. 如何添加两个IntStreams元素?
- 12. 如何将元素添加到集合
- 13. 如何在textarea中添加伪元素?
- 14. 如何在jquery中添加元素append
- 15. 如何onclick事件添加到元素
- 16. 如何添加元素制定会议
- 17. 如何将元素添加到BSONArray?
- 18. 如何添加类的父元素
- 19. 如何添加元素到Boost.Tuple
- 20. NSAutoLayout:如何动态添加元素
- 21. 如何将元素添加到ArrayList
- 22. ManagedBean与ArrayList,如何添加元素?
- 23. 如何将元素添加到数组?
- 24. 如何元素添加到阵列
- 25. 如何删除jQuery添加的元素?
- 26. 如何元素添加到阵列
- 27. 如何在元素后添加空格
- 28. 如何添加切片反射元素?
- 29. 如何在jQuery中添加新元素?
- 30. 如何在Javascript中添加HTML元素?
Does [this question](http://stackoverflow.com/questions/939853/how-can-i-add-a-child-to-a-node-at-a-specific-position)回答你的问题? – tadman
您确实应该添加与您的代码匹配的示例XML,以及您期望的XML应该如何。不要要求我们凑齐样本数据。 –