如何从 Ruby 中的 Nokogiri 集合生成不同的 HTML 格式

猎户座

我正在编写一个脚本,用于迁移当前的 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>

我相信部分代码可以正常工作,因为我可以识别单级和二级链接结构的总数。我还没有弄清楚如何将数据转换为我需要的最终版本。

眼车

您发布的代码不会产生您发布的输出。代码实际上产生了这个:

<a href="somelink1.html">Link 1</a>
<a href="#">Link 2</a>
<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>

我猜你不想要Link 1Link 2在该<details>部分。

您使用 XPath 选择器的方式存在问题:

child.xpath("//li/ul")

从文档的根开始搜索,而不是从child元素开始。相反,您需要使用:

child.xpath(".//li/ul")

如果要从child元素开始搜索

这是应该产生您需要的输出的清理代码:

require 'nokogiri'
source_file = Nokogiri.XML(File.read("navigation.inc").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 += "<details>"

      child.xpath(".//ul/li/a").each do |grandchild|
        navigation += grandchild.to_s
      end

      navigation = navigation + "</details>"
    else
      # not sure how that's supposed to work based on your input file example
       navigation = navigation + source_file.xpath("//ul[@id = 'nav']/li/a").to_s
    end
  end
end

puts navigation

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby,Nokogiri:如何在整个nokogiri解析,erb模板和HTML文件编码过程中确保UTF8

来自分类Dev

Scraping HTML table with Ruby and Nokogiri

来自分类Dev

用Ruby和Nokogiri刮HTML表

来自分类Dev

用Ruby和Nokogiri刮HTML表

来自分类Dev

如何使用Nokogiri抓取HTML?

来自分类Dev

Ruby / Nokogiri / Mechanize:如何下载XLS文件?

来自分类Dev

Ruby + Nokogiri-如何按存储在XML元素中的日期进行过滤?

来自分类Dev

如何将Nokogiri与Ruby结合使用以替换现有xml中的值?

来自分类Dev

如何使用Ruby / Nokogiri剥离未包含在<table>标记中的<tr>和<td>标记?

来自分类Dev

在Ruby中如何定义集合?

来自分类Dev

使用Nokogiri列出HTML中存在的标签

来自分类Dev

如何在Ruby中设置“内容”字段的日期格式?

来自分类Dev

使用 xpath 解析 HTML 节点到 Ruby/Nokogiri

来自分类Dev

如何在Ruby中使用Nokogiri迭代XML嵌套元素

来自分类Dev

Ruby + Nokogiri:如何创建具有attribute = value的XML节点?

来自分类Dev

Ruby:如何用内容/文本解析与Nokogiri的链接?

来自分类Dev

Nokogiri无法在ruby中解析XML-xmlns问题?

来自分类Dev

nokogiri未安装在ruby 2.7.1 centos 7.2中

来自分类Dev

Nokogiri无法在ruby中解析XML-xmlns问题?

来自分类Dev

在Ruby on Rails应用程序中安装“ nokogiri”时出错?

来自分类Dev

Ruby中的浮点格式序列

来自分类Dev

在Ruby中验证日期格式

来自分类Dev

UITextView中的HTML格式

来自分类Dev

html中的格式标题

来自分类Dev

html中的格式标题

来自分类Dev

如何在ng-grid中呈现html格式的内容?

来自分类Dev

如何播放HTML 5中的所有视频格式?

来自分类Dev

如何在VSC中获取html建议格式?

来自分类Dev

如何在HTML代码中设置行奇/偶格式

Related 相关文章

热门标签

归档