2013-05-15 55 views
1

给定的XMLRuby:如何使用xpath从特定元素查找XML子元素?

<a> 
    <b key=1> 
     <c value=xxx /> 
    </b> 
    <b key=2> 
     <c value=yyy /> 
    </b> 
</a> 

目标:获取每一个 “B”,然后再获得 “C” 根据该 “B”,像下面的结果。用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 /> 

,而不是刚刚起步的 “C” 下的每个 “B”

我曾尝试以下方法但没有运气,似乎如果使用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

不知道这里,但我的假设,即XPath着眼于第一个字符,认为这是一个/,并认为该路径绝对值(因为以/开头的路径是绝对的)。

也许你可以通过在//之前使用.强制相对路径,所以解析器不会混淆///

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

+0

它通过使用“.//c”,谢谢 –