如何使用Nokogiri解析XML文件提取特定路径的URL值?
解决方法
你当前代码直接输出<loc>节点对象时,Nokogiri会打印节点对应的XML片段,而非节点内的文本内容。要提取目标URL并筛选符合/a/b子目录的内容,可以通过以下两种方式实现:
方法一:使用XPath内置函数筛选
利用XPath的contains()函数直接在查询时过滤节点,效率更高:
require 'nokogiri' doc = File.open('./sitemap-en.xml') { |f| Nokogiri::XML(f) } # 筛选包含指定路径的<loc>节点,并输出其文本内容 doc.xpath('//loc[contains(text(), "https://www.example.com/a/b")]').each do |loc_node| puts loc_node.text end
方法二:Ruby字符串匹配筛选
先获取所有<loc>节点,再用Ruby的字符串方法判断是否符合条件,灵活性更强:
require 'nokogiri' doc = File.open('./sitemap-en.xml') { |f| Nokogiri::XML(f) } # 遍历所有<loc>节点,提取文本后筛选 doc.xpath('//loc').each do |loc_node| url = loc_node.text puts url if url.include?('https://www.example.com/a/b') end
两种方法都会输出你需要的两个结果:
https://www.example.com/a/b https://www.example.com/a/b/c
内容的提问来源于stack exchange,提问作者calyxofheld
相关产品推荐
相关产品推荐

