Nokogiri使用<和>中的CDATA解析XML

时间:2018-07-12 15:03:12

标签: ruby-on-rails nokogiri

我有一个具有以下内容的xml文件:

require 'nokogiri'

doc = Nokogiri::XML(File.open("test2.xml"))
root = doc.root

puts root['DATE']

doc.xpath('//DATA').each do |terr|
  puts "\nName: "+terr.xpath('NAME').text
end

我尝试用Nokogiri解析它,但是没有CDATA我无法获取内容

我的解析器脚本:

Name: <![CDATA[FIRSTNAME LASTNAME MIDDLENAME ]]>

这就是我得到的:

&lt;

如何在结果中消除“![CDATA [”?

我认为这完全与字符代码&gt;<有关,而不是>和{{1}},但是我并没有对它们做任何事情。

1 个答案:

答案 0 :(得分:0)

您的输入包含转义的<>字符(&lt;&gt;)。当您使用字符而不是HTML实体时,一切都会按预期进行:

input = "<DATA>
    <NAME><![CDATA[FIRSTNAME LASTNAME MIDDLENAME ]]></NAME>
    <NUM>3731</NUM>
    <person_type>4</person_type>
    <birth_date><![CDATA[01.11.1992]]></birth_date>
    <DESCRIPTION><![CDATA[DESCRIPTION]]></DESCRIPTION>
</DATA>"
doc = Nokogiri::XML(input)
doc.xpath('//DATA/NAME').text

=> "FIRSTNAME LASTNAME MIDDLENAME "

doc.xpath('//DATA').each do |terr|
  puts "\nName: "+terr.xpath('NAME').text
end

=> Name: FIRSTNAME LASTNAME MIDDLENAME

要摆脱HTML实体,可以在输入中调用CGI.unescapeHTML

doc = Nokogiri::XML(CGI.unescapeHTML(File.read("test2.xml")))