gpt4 book ai didi

ruby-on-rails - 使用 Nokogiri 添加节点

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:21 26 4
gpt4 key购买 nike

我有一个 HTML 字符串(例如 <div class="input">hello</div>),我只想在字符串中的 HTML 标记为 label 时添加一个节点。 (例如 <label>Hi</label> )。

doc = Nokogiri::XML(html)

doc.children.each do |node|
if node.name == 'label'
# this code gets called
span = Nokogiri::XML::Node.new "span", node
span.content = "hello"

puts span.parent
# nil

span.parent = node
# throws error "node can only have one parent"
end
end

doc.to_html # Does not contain the span.

我一生都无法理解我做错了什么,我们将非常感谢任何帮助。

编辑:这解决了我的问题,感谢您的回答!

# notice DocumentFragment rather than XML
doc = Nokogiri::HTML::DocumentFragment.parse(html_tag)
doc.children.each do |node|
if node.name == 'label'
span = Nokogiri::XML::Node.new "span", doc
node.add_child(span)
end
end

最佳答案

添加/更改/删除 HTML 很容易:

require 'nokogiri'

doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input">hello</div>')
div = doc.at('div')
div << '<span>Hello</span>'
puts doc.to_html

结果是:

# >> <div class="input">hello<span>Hello</span>
# >> </div>

请注意,上面的代码向 <div> 的现有子节点附加了一个新节点。 , 因为 << ,这意味着它们被附加到包含“hello”的文本节点之后

如果你想覆盖 child ,你可以很容易地使用 children = :

div.children = '<span>Hello</span>'
puts doc.to_html

结果是:

# >> <div class="input"><span>Hello</span></div>

children = 可以采用单个节点,该节点下可以嵌套多个其他节点,或者插入节点的 HTML 文本。这就是node_or_tags表示当您在 the documentation 中看到它时.

就是说,只更改嵌入式 <label> ,我会做类似的事情:

doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input"><label>hello</label></div>')
label = doc.at('div label')
label.name = 'span' if label
puts doc.to_html
# >> <div class="input"><span>hello</span></div>

或者:

doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input"><label>hello</label></div>')
label = doc.at('div label')
label.replace("<span>#{ label.text }</span>") if label
puts doc.to_html
# >> <div class="input"><span>hello</span></div>

一旦您指向标签名称,Nokogiri 可让您轻松更改标签名称。您可以轻松更改 <span> 中的文本通过替换 #{ label.text }随心所欲。

at('div label')是查找特定节点的一种方法。它基本上意味着“在第一个 div 中找到第一个标签”。 at表示找到某物的第一个,类似于使用 search(...).first . at 有 CSS 和 XPath 等价物和 searchNokogiri::XML::Node documentation如果您需要这些。

关于ruby-on-rails - 使用 Nokogiri 添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com