确定Nokogiri元素的子索引



如果我有一个Nokogiri::XML::元素,我如何计算它的子索引相对于它的父索引?即:

<foo>     <-- parent
  <bar/>  <-- 1st child
  <bar/>  <-- 2nd child
</foo>

在Javascriptland中,jQuery有index(),但是Nokogiri没有。Nokogiri确实提供了一个路径方法,但它返回一个XPath字符串,如"/foo/bar[2]",并将bar[1]截断为bar以启动,因此将其转换回数字有点麻烦:

element.path.split('/').last.slice(/[0-9]+/) || '1'          # quick'n'dirty
element.path.split('/').last.slice(/[([0-9]+)]/, 1) || '1' # a bit safer

如何:

element.parent.children.index(element)

只考虑非文本节点:

element.xpath('../*').index(element)

只考虑条形节点:

element.xpath('../bar').index(element)

技巧1:找到我的兄弟姐妹,看看我在他们中的位置:

idx = element.parent.element_children.index(element)
# Alternatively:
idx = element.parent.xpath('*').index(element)

技巧2:在我之前计算元素(不是文本)节点的数量:

idx = element.xpath('count(preceding-sibling::*)').to_i
# Alternatively, if you want to waste time and memory:
# idx = element.xpath('preceding-sibling::*').length

技术2明显更快。

选择具有相同元素名称的节点并返回索引:

element.parent.xpath(element.name).index(element)

相关内容

  • 没有找到相关文章

最新更新