给定xml
<a>
<b key=1>
<c value=xxx />
</b>
<b key=2>
<c value=yyy />
</b>
</a>
目标:首先获取每个“b”,然后在“b”下获取“c”,如下面的结果。使用XPath搜索孩子。
for <b key=1>
<c value=xxx />
for <b key=2>
<c value=xxx />
但低于代码
b_elements = XPath.match(xml, "//b[@key]")
b_elements.each do |b_element|
puts b_element.elements["//c"]
end
将导致yeilding
for <b key=1>
<c value=xxx />
<c value=yyy />
for <b key=2>
<c value=xxx />
<c value=yyy />
而不只是在每个“b”下获得“c”
我曾尝试过以下方法,但没有运气,似乎如果使用Xpath,它会自动从根元素搜索
b.get_elements("//c")
XPath.first(b, "//c")
我现在的解决方法是一次遍历遍历子元素1层并搜索所需的密钥,与使用XPath相比,这似乎相当愚蠢。 请指教,谢谢:)
答案 0 :(得分:1)
这里不确定,但我的假设是XPath查看第一个字符,看到它是/
,并认为该路径是绝对的(因为路径以/
意味着是绝对的。
您可以在.
之前使用//
强制路径是相对的,因此解析器不会将//
与/
混淆?
我的意思是,而不是"//c"
使用".//c"
?希望这会有所帮助。