15

私はこれについていくつかのことを見てきましたが、今のところ何も機能していないようです。Rails 3Ruby1.9.2でnokogiriを使用して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

したがって、ニュースラインテキストデータを取得するためにタグの名前とスペルが正しく設定されていることはわかっていますが、cdataテキストが表示されることはありません。

このテキストを取得するには、nokogiriをどのように処理する必要がありますか?

4

2 に答える 2

13

NokogiriのHMTLパーサーを使用してXMLを解析しようとしています。nodeXMLパーサーからの場合、XMLでは大文字と小文字が区別rされるためです。nilそうで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"

r.textまたはを介してCDATAにアクセスできますr.children

于 2012-05-07T05:44:12.423 に答える
4

ああ、なるほど。@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?}
于 2012-05-07T09:27:45.797 に答える