【发布时间】:2010-11-15 13:13:12
【问题描述】:
我想遍历 XML 文件中的所有 <HeadA> 和 <HeadB> 元素,并为每个元素添加一个唯一的 ID。到目前为止我尝试过的方法是:
@xml.each_element('//HeadA | //HeadB') do |heading|
#add a new id
end
问题是,来自 XPath //HeadA | //HeadB 的节点集是所有 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。
【问题讨论】:
-
任何兼容的 XPath 引擎都必须按文档顺序选择节点。你的显然是不合规的。强烈建议不要使用它,不要误认为这是XPath。
-
@Dimitre 谢谢,很高兴知道。
-
@Dimitre:事实上,没有规范强制执行结果节点集的顺序。这是托管语言的责任。你说得对,几乎每个 XPath 引擎都会使用文档顺序。