保存保存与xpath描述

时间:2017-02-05 02:15:43

标签: 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>
    <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

1 个答案:

答案 0 :(得分:0)

这是一个经典的XPath错误。 /在XPath表达式的开头总是引用根文档。如果您打算执行相对XPath查询并需要使用/启动表达式,那么您需要明确地使表达式成为上下文元素的前提条件。 .

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