Ruby:如何使用xpath从特定元素中查找XML子元素?

时间:2013-05-15 10:19:33

标签: ruby rexml

给定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相比,这似乎相当愚蠢。 请指教,谢谢:)

参考: http://ruby-doc.org/stdlib-1.9.3/libdoc/rexml/rdoc/REXML/Element.html#method-i-each_element_with_attribute

1 个答案:

答案 0 :(得分:1)

这里不确定,但我的假设是XPath查看第一个字符,看到它是/,并认为该路径是绝对的(因为路径以/意味着是绝对的。

您可以在.之前使用//强制路径是相对的,因此解析器不会将///混淆?

我的意思是,而不是"//c"使用".//c"?希望这会有所帮助。