我正在尝试使用 XPath 在 XML 文件中搜索特定节点。此搜索在 REXML 下工作得很好,但 REXML 对于大型 XML 文档来说太慢了。于是搬到LibXML
.
我的简单示例是处理 Yum repomd.xml 文件,可以在此处找到示例:http: //mirror.san.fastserv.com/pub/linux/centos/6/os/x86_64/repodata/repomd.xml
我的测试脚本如下:
require 'rubygems'
require 'libxml'
p = LibXML::XML::Parser.file( "/tmp/dr.xml")
repomd = p.parse
filelist = repomd.find_first("/repomd/data[@type='filelists']/location@href")
puts "Length: " + filelist.length.to_s
filelist.each do |f|
puts f.attributes['href']
end
我收到此错误:
Error: Invalid expression.
/usr/lib/ruby/gems/1.8/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:123:in `find': Error: Invalid expression. (LibXML::XML::Error)
from /usr/lib/ruby/gems/1.8/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:123:in `find'
from /usr/lib/ruby/gems/1.8/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:130:in `find_first'
from /tmp/scripty.rb:6
我也尝试过像下面这样更简单的例子,但仍然没有骰子。
p = LibXML::XML::Parser.file( "/tmp/dr.xml")
repomd = p.parse
filelist = repomd.root.find(".//location")
puts "Length: " + filelist.length.to_s
在上述情况下,我得到输出:
Length: 0
非常感谢您的启发指导,我已经搜索了我做错了什么,但我无法弄清楚......
这是一些将获取文件并对其进行处理的代码,但仍然无法正常工作...
require 'rubygems'
require 'open-uri'
require 'libxml'
raw_xml = open('http://mirror.san.fastserv.com/pub/linux/centos/6/os/x86_64/repodata/repomd.xml').read
p = LibXML::XML::Parser.string(raw_xml)
repomd = p.parse
filelist = repomd.find_first("//data[@type='filelists']/location[@href]")
puts "First: " + filelist