尝试使用nokogiri获取xml文件中的cdata标记内容
我已经看到了几件事,但到目前为止似乎没有任何工作。 我正在使用rails 3 ruby 1.9.2上的nokogiri通过url解析xml。
xml的片段如下所示:
我试图解析这个以获取与NewsLineText相关联的文本
r = node.at_xpath('.//newslinetext') if node.at_xpath('.//newslinetext') s = node.at_xpath('.//newslinetext').text if node.at_xpath('.//newslinetext') t = node.at_xpath('.//newslinetext').content if node.at_xpath('.//newslinetext') puts r puts s ? if s.blank? 'NOTHING' : s puts t ? if t.blank? 'NOTHING' : t
我得到的回报是
NOTHING NOTHING
所以我知道我的标签被正确命名/拼写以获取newslinetext数据,但是cdata文本永远不会出现。
我需要用nokogiri来获取此文本?
您正在尝试使用Nokogiri的HMTL解析器解析XML。 如果node
来自XML解析器,则r
将nil
因为XML区分大小写; 你的r
不是nil
所以你正在使用不区分大小写的HTML解析器。
使用Nokogiri的XML解析器,你会得到这样的东西:
>> r = doc.at_xpath('.//NewsLineText') => #, #, #]> >> r.text => "\n \n Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.\n \n"
你将能够通过r.text
或r.children
获得CDATA。
啊,我明白了。 @mu所说的是对的。 但要直接得到cdata,也许:
xml =< EOF node = Nokogiri::XML xml cdata = node.search('NewsLineText').children.find{|e| e.cdata?}