试图让使用引入nokogiri在XML文件中的CDATA标签内内容(trying to get co

2019-06-24 05:14发布

我看到的这几件事情,但没有什么似乎已工作至今。 我使用的引入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做的就是这样的文字?

Answer 1:

你试图使用引入nokogiri的HMTL解析器来解析XML。 如果node从XML解析器然后r将是nil ,因为XML是大小写敏感的; 你的rnil ,所以你正在使用的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.textr.children



Answer 2:

我明白了。 什么@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?}


文章来源: trying to get content inside cdata tags in xml file using nokogiri