如何添加元素?
回答
這是比這更容易了很多:
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應該如何。不要要求我們湊齊樣本數據。 –