![](/img/trans.png)
[英]ActiveRecord save all changes to has_many childs on parent save
[英]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>
我想用這樣的哈希將所有文本保存在文檔(嘿,測試,yoyo,大聲笑)中的類A和B中:
{ {"thing1", ["Hey","Test"]}, {"thing2", ["yoyo","lol"]} }
我該怎么辦? (即在摩擦中使用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
這是一個經典的XPath錯誤。 /
在XPath表達式的開頭始終引用根文檔。 如果您打算進行相對的XPath查詢,並且需要以/
開頭表達式,則需要通過在'前面添加'來顯式地使表達式關注上下文元素.
:
....
A = ".//td[@class='A']"
B = ".//span[@class='B']"
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.