Ruby/Nokogiri/Xpath 浅搜索

标签 ruby search xpath nokogiri

应用到下面的(简化的)xml 的代码让我得到了带有 myanim1.swf 的节点,正如预期的那样。我实际上想要带有 myanim3.swf 的节点。我想说的是“获取带有属性名称=animationUrl 的属性标记的第一个节点,但不要超过一个 child ”。我目前有一个解决方法,但我正在寻找更优雅的解决方案。

这是 ruby​​,对象是 Nokogiri 对象。我相信这是 XPath 搜索,但我不太清楚它是否是 Nokogiri 的 XPath 风格。无论如何,感谢帮助,谢谢。

XML:

<blah>
    <property name="overlays">
        <array>
            <object type="myType">
                <property name="animationUrl" value="myanim1.swf"/>
            </object>
            <object type="myType">
                <property name="animationUrl" value="myanim2.swf"/>
            </object>
        </array>
    </property>
    <property name="animationUrl" value="myanim3"/>
    </property>
</blah>

代码:

myNode = thisNode.search("property[name=animationUrl]").first.andand["value"]

最佳答案

get the first node with a property tag with attribute name=animationUrl, but don't go deeper than one child

相对 XPath 表达式:

*[property/@name='animationUrl'][1]

这意味着:上下文节点的第一个子元素至少有一个 property 子元素,其 @name 属性等于 'animationUrl'

绝对 XPath 表达式:

/*[property/@name='animationUrl']

这意味着:根元素至少有一个 property 子元素,其 @name 属性等于 'animationUrl'

/descendant::*[property/@name='animationUrl'][1]

这意味着:文档根的第一个后代元素至少有一个 property 子元素,其 @name 属性等于 'animationUrl'

关于Ruby/Nokogiri/Xpath 浅搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121820/

相关文章:

ruby - 瘦运行Redmine一直崩溃

java - 如何递归遍历XPath?

带复选框的 Android 可过滤回收 View

php - 基于手机键盘的正则名称查询

java - 解析 XML 仅获取注释和日期值

PHP SIMPLEXML XPATH 匹配具有相同子字符串的多个标签

ruby - 如何在 Ruby 中的 1 行中执行多个连续的函数?

ruby - before_session Hook 失败:Pry::CommandError:找不到此方法:加载

ruby - 如何检查 Ruby 哈希中是否存在键?

perl - 根据当前文件的内容从 awk 搜索/读取另一个文件,是否可能?