Ruby on rails 解析ul和ol中的嵌套li
我有一个场景,当li在ul下时,我需要用一个点(.)替换它,当li在ol下时,我需要用一个数字替换它 但问题是- 1) 这对我来说是行不通的 2) 它是在同一级别追加的。同一级别意味着一旦找到li,它将首先添加点(.),然后添加数字 我想要什么 1) 每当li进入ul时,应添加点(.) 2) 每当李进入ol时,它应该添加一个数字Ruby on rails 解析ul和ol中的嵌套li,ruby-on-rails,ruby,ruby-on-rails-4,html-lists,nokogiri,Ruby On Rails,Ruby,Ruby On Rails 4,Html Lists,Nokogiri,我有一个场景,当li在ul下时,我需要用一个点(.)替换它,当li在ol下时,我需要用一个数字替换它 但问题是- 1) 这对我来说是行不通的 2) 它是在同一级别追加的。同一级别意味着一旦找到li,它将首先添加点(.),然后添加数字 我想要什么 1) 每当li进入ul时,应添加点(.) 2) 每当李进入ol时,它应该添加一个数字 data = "<ol>\n<li>Introduction\n<ol>\n<li>hyy ssss</li>
data = "<ol>\n<li>Introduction\n<ol>\n<li>hyy ssss</li>\n</ol>\n</li>\n<li>Description</li>\n<li>Observation</li>\n<li>Results</li>\n<li>Summary</li>\n</ol>\n<ul>\n<li>Introduction</li>\n<li>Description\n<ul>\n<li>Observation\n<ul>\n<li>Results\n<ul>\n<li>Summary</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Overview</li>\n</ul>\n<p>All the testing regarding bullet points would have been covered with the above content. Hence publishing this content will make an entry in in the selected page, cricket page and so on.</p>\n"
content = Nokogiri::HTML.parse(data)
content.at('ul').children.xpath("//li").each { |li| li.inner_html="\u2022 "+li.inner_html }
content.at('ol').children.xpath("//li").each_with_index { |li,index| li.inner_html="#{index} "+li.inner_html }
数据="\n\n
content=Nokogiri::HTML.parse(数据)
content.at('ul').children.xpath(//li”).each{li | li.inner_html=“\u2022”+li.inner_html}
content.at('ol').children.xpath(//li”)。每个_都带有_索引{li,索引{li.inner_html=“#{index}”+li.inner_html}
也许您需要:
content.css('ol').reverse.each do |ol|
ol.css('> li').each_with_index { |li,index| li.inner_html="#{index + 1} "+li.inner_html }
end
content.css('ul > li').reverse.each { |li| li.inner_html="\u2022 "+li.inner_html }
puts content
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<ol>
<li>1 Introduction
<ol>
<li>1 hyy ssss</li>
</ol>
</li>
<li>2 Description</li>
<li>3 Observation</li>
<li>4 Results</li>
<li>5 Summary</li>
</ol>
<ul>
<li>• Introduction</li>
<li>• Description
<ul>
<li>• Observation
<ul>
<li>• Results
<ul>
<li>• Summary</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>• Overview</li>
</ul>
</body></html>
当你做content.css('ul>li')
时,你得到的顺序是[描述,观察]。如果没有反向
,当您运行代码段时,您会更改描述,但这样做也会更改观察节点的对象id
。然后您更改了在内容
中未被引用的观察节点。这就是为什么,我将其反向,并在家长之前获得了子对象s、 我确保先更改子节点,然后更改父节点,以便父节点知道子节点中的更改,并且没有未引用的节点
假设描述的节点id为1234,观察节点id为2345。当你改变描述时,它改变了自己,但也改变了它的子节点(2345)。新对象id可以分别为3456和4567。然后你改变了2345(通过迭代),但没有效果,因为你的内容
显示3456->4567
希望这是有意义的。此外,当我们嵌入标记时,您能为每个级别添加空格吗?@ankur补充了这一点作为解释。我将进一步建议您使用节点的对象id
,以获得更清晰的效果。
<ul>
<li>Description
<ul>
<li>Observation</li>
</ul>
</li>
</ul>