【发布时间】:2019-09-25 10:41:56
【问题描述】:
我正在编写一个脚本,用于迁移当前 HTML 页面并将其转换为不同的 HTML 布局。我可以使用 Nokogiri 和 XPath 从文档中获取信息。
问题是如何以类似于遍历数组和哈希以生成我需要的布局的方式遍历使用循环检索的节点。
这是我尝试转换的原始布局示例:
<ul id="nav">
<li><a href="somelink1.html">Link 1</a> </li>
<li>
<a href="#">Link 2</a>
<ul>
<li><a href="sublink1.html">Sublink 1</a></li>
<li><a href="sublink2.html">Sublink 2</a></li>
</ul>
</li>
</ul>
到目前为止,我已经尝试过此代码。问题在于,当它遍历集合集时,它会在每次通过集合时输出新 HTML 标记中的所有节点,而不是仅输出当前索引处的信息。
require 'nokogiri'
source_file = Nokogiri.XML(open("navigation.inc"))
source_file = Nokogiri.XML(source_file.to_s.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))
navigation = ""
if source_file.xpath("//ul[@id = 'nav']").length > 0
navcontain = source_file.xpath("//ul[@id = 'nav']/li")
navcontain.each do | child |
if child.xpath("//li and count(*) = 2")
navigation = navigation + "<details>"
child.xpath("//li/ul").each do | children |
navigation = navigation + child.xpath("//li/a").to_s
end #end child loop
navigation = navigation + "</details>"
else
navigation = navigation + source_file.xpath("//ul[@id = 'nav']/li/a").to_s
end #end conditional check
end #end initial loop
end #end length check
puts navigation
这是上面代码当前正在执行的示例:
<div id="nav">
<details>
<a href="somelink1.html">Link 1</a>
<a href="#">Link 2</a>
<a href="sublink1.html">Sublink 1</a>
<a href="sublink2.html">Sublink 2</a>
</details>
<details>
<a href="somelink1.html">Link 1</a>
<a href="#">Link 2</a>
<a href="sublink1.html">Sublink 1</a>
<a href="sublink2.html">Sublink 2</a>
</details>
</div>
转换后我想要的格式是:
<div id="nav">
<a href="somelink1.html">Link 1</a>
<details>
<summary>
Link 2
</summary>
<a href="sublink1.html">Sublink 1</a>
<a href="sublink2.html">Sublink 2</a>
</details>
</div>
我相信部分代码可以正常工作,因为我可以识别单级和二级链接结构的总数。我还没有弄清楚如何将数据翻译成我需要的最终版本。
【问题讨论】:
-
这是 XSLT 的完美用例...