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

Ruby 将所有元素保存在与xpath描述匹配的父项下,ruby,xpath,rexml,Ruby,Xpath,Rexml,假设我有这样一份文件: <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> <sp

假设我有这样一份文件:

<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>
我该怎么办?(我在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
(这只是一个测试,我想用add to hash替换打印)

它为class=“thing”的每个元素打印整个文档中与A和B匹配的每个元素。因此输出为:

Hey
test
yoyo
lol
Hey
test
yoyo
lol
我想为每个class='thing'打印匹配A和B的子项:

Hey
test
yoyo
lol

这是一个典型的XPath错误。XPath表达式开头的
/
始终引用根文档。如果要执行相对XPath查询,并且需要使用
/
启动表达式,则需要通过“预加”一个
,显式使表达式注意上下文元素:

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