Ruby 尝试使用nokogiri获取xml文件中cdata标记内的内容

Ruby 尝试使用nokogiri获取xml文件中cdata标记内的内容,ruby,ruby-on-rails-3.1,xml-parsing,nokogiri,cdata,Ruby,Ruby On Rails 3.1,Xml Parsing,Nokogiri,Cdata,我在这方面见过好几次,但到目前为止似乎没有任何效果。我在Rails3Ruby1.9.2上使用nokogiri通过url解析xml xml的一个片段如下所示: <NewsLineText> <![CDATA[ Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee. ]]> </NewsLineText>

我在这方面见过好几次,但到目前为止似乎没有任何效果。我在Rails3Ruby1.9.2上使用nokogiri通过url解析xml

xml的一个片段如下所示:

<NewsLineText>
  <![CDATA[
  Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly     creme brulee.
  ]]>
</NewsLineText>
>> 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"
我得到的回报是

<newslinetext></newslinetext>
NOTHING
NOTHING

没有什么
没有什么
因此,我知道我的标签命名/拼写正确,以获取新闻行文本数据,但cdata文本从未显示


我需要用nokogiri做什么才能得到这篇文章

您正在尝试使用Nokogiri的HMTL解析器解析XML。如果
node
as来自XML解析器,那么
r
将是
nil
,因为XML是区分大小写的;您的
r
不是
nil
,因此您使用的是不区分大小写的HTML解析器

使用Nokogiri的XML解析器,您将得到如下结果:

<NewsLineText>
  <![CDATA[
  Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly     creme brulee.
  ]]>
</NewsLineText>
>> 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"
>r=doc.at_xpath('.//NewsLineText')
=> #
>>r.text
=>“\n\n安娜·肯德里克“痴迷于”权力游戏,喜欢烹饪,尤其是奶油布吕利。\n\n”

您可以通过
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?}

xml=注意你的情况,我相信nokogiri会屏蔽html名称,但不会xml@pguardiario:Aaron正在使用Nokogiri的HTML解析器,而不是它的XML解析器。你们都是对的。我无意中使用了HTML解析器,这迫使我使用小写。然后,当我尝试使用XML解析器时,没有得到任何结果(因为我已经在使用小写)。看到这里的答案后,我意识到自己的愚蠢,转而使用区分大小写和XML。工作完美。谢谢。。我使用HTML,试图区分大小写,但它没有给我任何结果,我也不明白为什么,所以我把它全部改为小写,这很有效。后来我尝试使用Nokogiri的XML解析器,但我忽略了大小写,它没有返回任何结果。我想我应该尝试使用XML和区分大小写的方法,它会与我所尝试的方法一起工作。我会检查一下,然后告诉你结果。你们都是对的。我无意中使用了HTML解析器,这迫使我使用小写。然后,当我尝试使用XML解析器时,没有得到任何结果(因为我已经在使用小写)。看到这里的答案后,我意识到自己的愚蠢,转而使用区分大小写和XML。工作完美。thanksnokogiri\u doc\u object.xpath(“/root/element”).children[0]。text