【问题标题】:Ruby: How to find XML child element from specific element using xpath?Ruby:如何使用 xpath 从特定元素中查找 XML 子元素?
【发布时间】:2013-05-15 10:19:33
【问题描述】:

给定 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

将导致屈服

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

【问题讨论】:

    标签: ruby rexml


    【解决方案1】:

    这里不确定,但我的假设是 XPath 查看 第一个字符,认为它是 /,并认为路径是绝对路径(因为路径以 @987654322 开头@ 是绝对的)。

    您可能可以通过在// 之前使用. 来强制路径为相对路径,这样解析器就不会将/// 混淆?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2020-07-12
      相关资源
      最近更新 更多