我有一个具有此内容的XML文件:
<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>
我试图用Nokogiri解析它,但是没有CDATA我无法获得内容。
我的解析器脚本:
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
这是我得到的:
Name: <![CDATA[FIRSTNAME LASTNAME MIDDLENAME ]]>
如何去除结果中的“ ![CDATA[
”?
我认为这完全是关于实体<
和>
,而不是<
和>
,但我无法让Nokogiri对它们进行任何处理。
您的输入包含转义的<
和>
字符(<
和>
)。当您使用字符而不是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")))