Nokogiri解析编码的URL字符串

时间:2016-05-23 15:54:34

标签: ruby xml character-encoding nokogiri

我正在使用Nokogiri来解析外部XML文档。我正在处理的其中一个文件包含使用HTML编码错误编码的网址,此外不在CDATA个标记内:

XML节点如下:

<JobUrl>https://chk.tbe.taleo.net/chk01/ats/careers/requisition.jsp?org=JUSTENERGY&amp;cws=1&amp;rid=2621</JobUrl>

当Nokogiri解析文档时,结果是:

#<Nokogiri::XML::Element:0x3fdbd79a4384 name="JobUrl" children=[#<Nokogiri::XML::Text:0x3fdbd79a1fa8 "https://chk.tbe.taleo.net/chk01/ats/careers/requisition.jsp?org=JUSTENERGYcws=1rid=2482">]>

请注意缺少的“&amp;”。

Nokogiri有没有办法将其正确翻译为

https://chk.tbe.taleo.net/chk01/ats/careers/requisition.jsp?org=JUSTENERGY&cws=1&rid=2621

或者我是否需要请求文档维护者删除编码并使用CDATA标记?

我正在使用OpenURI来提取完整​​的XML文档:

require 'nokogiri'
require 'open-uri'    
doc = Nokogiri::XML(open(url)).remove_namespaces!

1 个答案:

答案 0 :(得分:0)

您的问题没有充分证明您遇到的问题,但猜测一下,您似乎没有正确使用Nokogiri。考虑一下这段代码,这是我开始的地方:

require 'nokogiri'

doc = Nokogiri::XML('<JobUrl>https://foo.bar/file.jsp?org=JE&amp;cws=1&amp;rid=2621</JobUrl>')

doc.at('JobUrl').text
# => "https://foo.bar/file.jsp?org=JE&cws=1&rid=2621"

doc.at('JobUrl').content
# => "https://foo.bar/file.jsp?org=JE&cws=1&rid=2621"

在解码实体后,生成的文本似乎是正确的URL。如果您需要对它们进行编码,请在使用它们之前对其进行重新编码。