3

特定の属性を持つ要素ノードを見つける方法を探していたところ、「Nokogiri を使用して、特定の属性名を含む要素内のすべてのノードを取得する

ただし、属性にコロンがある場合は機能しません。たとえば、「foo:bar」のように

<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

これらは古いバージョンですか?

4

1 に答える 1

2

それはうまくいくはずです。次のコード例を参照してください。

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">]>]>]>
于 2013-09-23T09:03:40.607 に答える