应用到下面的(简化的)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/