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

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

问题是,xpath//HeadA | //HeadB中的nodeset是所有的HeadAs后跟所有的HeadBs。我需要的是所有HeadAs和HeadBs按照它们在文档中出现的顺序的有序列表。
为了澄清这一点,我的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

07-25 21:50