说我有这样的文件:
<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>
我想保存文档中的A和B类中的所有文本(嘿,test,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
(这只是一个测试,我想用添加到哈希的替换打印)
对于class =“thing”的每个元素,它会打印整个文档中与A和B匹配的每个元素。所以输出是:
Hey
test
yoyo
lol
Hey
test
yoyo
lol
我想要的是每个class ='thing'打印其匹配A和B的子项:
Hey
test
yoyo
lol
答案 0 :(得分:0)
这是一个经典的XPath错误。 /
在XPath表达式的开头总是引用根文档。如果您打算执行相对XPath查询并需要使用/
启动表达式,那么您需要明确地使表达式成为上下文元素的前提条件。 .
:
....
A = ".//td[@class='A']"
B = ".//span[@class='B']"
....