nokogiri move标记如果它打破了父节点文本

时间:2013-02-07 23:26:13

标签: html ruby nokogiri

我检查每个终端节点的文本。 A标签会破坏文本,因此文本与/ PART /不匹配。是否可以移动A标签的位置:

<P><FONT SIZE=3><B>PA<A NAME="name"></A>RT</B></FONT></P>

<P><FONT SIZE=3><B><A NAME="name"></A>PART</B></FONT></P>

但是如果A标签没有破坏父节点的文本,我将保持原样。

我不知道如何判断标签是否破坏了父节点的文本。

这是我尝试的代码,如果标签破坏了文本,则没有条件。

require 'nokogiri'
require 'awesome_print'

html = '<P><FONT SIZE=3><B>PA<A NAME="name"></A>RT II</B></FONT></P>
<P><FONT SIZE=3><B><A NAME="name"></A>PART II</B></FONT></P>'

doc = Nokogiri::HTML(html)

doc.search('a').each do |n|
    text = n.parent.text
    n.parent.replace n
    n.parent.content = text
end

输出

 <p><font size="3">PART II</font></p>
 <p><font size="3">PART II</font></p>

1 个答案:

答案 0 :(得分:1)

要将前一个文本移动到a的另一侧,您可以执行以下操作:

a.add_next_sibling(a.previous) if a.previous && a.previous.text?