保存 将所有元素保存在与 xpath 描述匹配的父项下

Save save all elements under a parent that matches xpath description

假设我有这样的文档:

<div class='thing'>
    <td class='A'>Hey</td>
    <span class='B'>test</span>
    <td class='C'>asd</td> 
</div>
<div class='thing'>
    <td class='A'>yoyo</td>
    <span class='B'>lol</span>
    <td class='C'>aaaaaaaaaaaa</td>
</div>

而且我想将 classes A 和 B 中的所有文本保存在文档中(嘿,测试,yoyo,lol),比如这样的哈希:

{ {"thing1", ["Hey","Test"]}, {"thing2", ["yoyo","lol"]} }

我该怎么办? (我在 rub

中使用 REXML 和 Xpath

当我这样做时:

doc = Document.new(xmlfile)
parent  = "//div[@class='thing']"
A   = "//td[@class='A']"
B   = "//span[@class='B']"

XPath.each(doc, parent) do |thing|
  XPath.each(thing, A + "|" + B) do |children|
    puts children.text
  end
end

(这只是一个测试,我想用添加到哈希替换打印)

它打印 整个文档 中与 A 和 B 匹配的每个元素,对于 class="thing" 的每个元素。所以输出是:

Hey
test
yoyo
lol
Hey
test
yoyo
lol

我想要的是为每个 class='thing' 打印其匹配 A 和 B 的子项:

Hey
test
yoyo
lol

这是一个典型的 XPath 错误。 / 在 XPath 表达式的开头 总是 引用根文档。如果你打算做一个相对的 XPath 查询并且需要以 / 开始表达式,你需要通过 'prepending' a . 明确地使表达式注意上下文元素:

....
A   = ".//td[@class='A']"
B   = ".//span[@class='B']"
....