ruby - 如何获取包含冒号的特定属性的节点?

  显示原文与译文双语对照的内容
130 4

我正在寻找一种方法来查找具有特定属性的元素节点,并找到: "使用Nokogiri获取包含特定属性名的元素中的所有节点。"

但是,当属性有冒号时,它不能工作,例如"栏"?


<abc foo:bar="hello"></abc>

( 是,它的有效) 。

但是,当我使用时:


elements = @doc.xpath("//*[@foo:bar]")

我知道了


unexpected ':' after '#<Nokogiri::CSS::Node:0x107458870>' (Nokogiri::CSS::SyntaxError)

而且,当我使用时:


elements = @doc.xpath("//*[@foo:bar]")

我知道了


Invalid predicate://*[@foo:bar] (Nokogiri::XML::XPath::SyntaxError)

谁有好的建议吗?


$ nokogiri -v
# Nokogiri (1.5.6)
--- 
nokogiri: 1.5.6
warnings: []

ruby: 
 version: 1.8.7
 engine: mri
 description: ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
 platform: universal-darwin11.0
libxml: 
 loaded: 2.7.3
 compiled: 2.7.3
 binding: extension

这些旧版本?

时间: 原作者:

136 1

它应该有效。请参见下面的示例代码:


require 'nokogiri'
doc = Nokogiri::XML('<root xmlns:foo="http://www.example.com/"><abc foo:bar="hello"></abc></root>')
doc.xpath('//*[@foo:bar]')
# => #<Nokogiri::XML::Document:0x61ca74 name="document" children=[#<Nokogiri::XML::Element:0x61c63c name="root" children=[#<Nokogiri::XML::Element:0x61c3e4 name="abc" attributes=[#<Nokogiri::XML::Attr:0x61c36c name="bar" namespace=#<Nokogiri::XML::Namespace:0x61c088 prefix="foo" href="http://www.example.com/"> value="hello">]>]>]>

原作者:
...