我有一个具有以下内容的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 ]]>
这就是我得到的:
<
如何在结果中消除“![CDATA [”?
我认为这完全与字符代码>
和<
有关,而不是>
和{{1}},但是我并没有对它们做任何事情。
答案 0 :(得分:0)
您的输入包含转义的<
和>
字符(<
和>
)。当您使用字符而不是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")))