我看到的这几件事情,但没有什么似乎已工作至今。 我使用的引入nokogiri上轨3红宝石1.9.2通过URL解析XML。
该XML的一个片段是这样的:
<NewsLineText>
<![CDATA[
Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.
]]>
</NewsLineText>
我试图解析这一点得到与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
我得到的回报是
<newslinetext></newslinetext>
NOTHING
NOTHING
所以我知道我的标签被命名为/拼写正确获得在newslinetext数据,但CDATA文本一直没有出现。
我需要做什么用引入nokogiri做的就是这样的文字?
你试图使用引入nokogiri的HMTL解析器来解析XML。 如果node
从XML解析器然后r
将是nil
,因为XML是大小写敏感的; 你的r
不nil
,所以你正在使用的HTML解析器不区分大小写。
使用引入nokogiri的XML解析器,你会得到这样的事情:
>> r = doc.at_xpath('.//NewsLineText')
=> #<Nokogiri::XML::Element:0x8066ad34 name="NewsLineText" children=[#<Nokogiri::XML::Text:0x8066aac8 "\n ">, #<Nokogiri::XML::CDATA:0x8066a9c4 "\n Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.\n ">, #<Nokogiri::XML::Text:0x8066a8d4 "\n">]>
>> r.text
=> "\n \n Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.\n \n"
你就能够在CDATA通过获得r.text
或r.children
。
我明白了。 什么@mu说是正确的。 但要在CDATA直接获得,也许:
xml =<<EOF
<NewsLineText>
<![CDATA[
Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.
]]>
</NewsLineText>
EOF
node = Nokogiri::XML xml
cdata = node.search('NewsLineText').children.find{|e| e.cdata?}