ruby - 使用 REXML XPath 按顺序获取元素

标签 ruby xpath rexml

我想遍历所有 <HeadA><HeadB> XML 文件中的元素,并为每个元素添加一个唯一的 ID。到目前为止我尝试过的方法是:

@xml.each_element('//HeadA | //HeadB') do |heading|
  #add a new id
end

问题是,来自 XPath 的节点集 //HeadA | //HeadB是所有HeadA s 后跟所有 HeadB秒。我需要的是所有 HeadA 的有序列表s 和 HeadB按照它们在文档中出现的顺序排列。

澄清一下,我的 XML 可能如下所示:

<Doc>
  <HeadA>First HeadA</HeadA>
  <HeadB>First HeadB</HeadB>
  <HeadA>Second HeadA</HeadA>
  <HeadB>Second HeadB</HeadB>
</Doc>

我从 XPath 得到的是:

  <HeadA>First HeadA</HeadA>
  <HeadA>Second HeadA</HeadA>
  <HeadB>First HeadB</HeadB>
  <HeadB>Second HeadB</HeadB>

当我需要得到的是有序的节点时:

  <HeadA>First HeadA</HeadA>
  <HeadB>First HeadB</HeadB>
  <HeadA>Second HeadA</HeadA>
  <HeadB>Second HeadB</HeadB>

这样我就可以按顺序添加 ID。

最佳答案

好的,第二次尝试,但我想我这次成功了:P

@xml.each_element('//*[self::HeadA or self::HeadB]') do |heading|
  puts heading.text
end

关于ruby - 使用 REXML XPath 按顺序获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184683/

相关文章:

ruby - 在 Ruby 中以 CSV 格式抓取和存储

ruby - 如何在rp5rc中设置processing_root

ruby - 如何使用 ruby​​、xpath、rexml 从子上下文获取节点文本

ruby-on-rails - Ruby 将单引号转换为 XML 中的双引号

ruby-on-rails - 能够处理 rar/tar/zip/7z 的 Ruby/rubyzip 替代方案?

ruby - 忽略 GEM,因为它的扩展未构建

reactjs - 通过 XPath 获取 tr 中特定 td 的索引

xslt - 什么是node()的显式版本

php - 使用 PHP DOM 解析 HTML - 类包含文本