使用nokogiri xpath访问xmlns中的嵌套元素
问题描述:
我是nokogiri的新手,并且无法使用xpath访问具有特定xmlns的xml文档的嵌套元素。使用nokogiri xpath访问xmlns中的嵌套元素
考虑下面的代码
#!/opt/chef/embedded/bin/ruby
require 'nokogiri'
doc = Nokogiri::XML.parse <<-XML
<?xml version="1.0" encoding="UTF-8" ?>
<domain xmlns="urn:jboss:domain:1.8">
<profiles>
<profile name="full">
<subsystem xmlns="urn:jboss:domain:datasources:1.2">
<datasources>
<datasource jndi-name="java:/Paulstestjndi" pool-name="pauls_ds" enabled="false">
<connection-url>jdbc:oracle:thin:@testhost1:80001paulstestinstance|jdbc:oracle:thin:@testhost2:80001paulstestinstance</connection-url>
</datasource>
</datasources>
</subsystem>
</profile>
</profiles>
</domain>
XML
datasources = doc.xpath('//datasources:datasource', 'datasources' => "urn:jboss:domain:datasources:1.2")
datasources.each do |datasource|
conn_url = datasource.xpath("connection-url")
puts "CLASS = #{conn_url.class}"
puts "No of Entries = #{conn_url.length}"
end
我能够取回使用XPath数据源,但我无法使用XPath访问“连接网址”为每个数据源。
我尝试了好几种的XPath调用来实现这一目标的例子如下
conn_url = datasource.xpath("connection-url")
conn_url = datasource.xpath("//connection-url")
conn_url = datasource.xpath("//datasources:datasource/connection-url", 'datasources'=>"urn:jboss:domain:datasources:1.2")
但每次似乎返回一个空的结果集。
我缺少什么?
答
这是一个命名空间的问题:
datasource.xpath(
'subsystem:connection-url',
'subsystem' => 'urn:jboss:domain:datasources:1.2')
#⇒ [#<... name="connection-url" namespace=...