2012-05-07 1 views
13

나는 이것에 대해 여러 가지를 보았지만 지금까지는 아무 것도 보이지 않았습니다. 내가 레일 3 루비 1.9.2에 nokogiri를 사용하여 URL을 통해 XML을 구문 분석입니다. 나는 NewsLineText과 관련된 텍스트를 얻을이 구문 분석하려고nokogiri를 사용하여 XML 파일의 cdata 태그 안에 내용을 가져 오려고 시도합니다.

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

:

는 XML의 조각은 다음과 같습니다

<newslinetext></newslinetext> 
NOTHING 
NOTHING 

내 태그가 newslinetext 데이터를 얻기 위해 올바르게 이름이 지정되었지만 cdata 텍스트가 표시되지 않습니다.

nokogiri와 (과) 무슨 관계가 있나요?

+0

이 사건을보고, 나는 노코 기리가 HTML 이름을와 downcase하지만 것입니다 생각하지 XML – pguardiario

+0

@pguardiario : 아론 노코 기리의 HTML 파서,하지의 XML 파서를 사용하고 있습니다. –

+0

모두 틀렸어. 나는 실수로 소문자를 사용하도록 HTML 구문 분석기를 사용하고있었습니다. 그런 다음 XML 구문 분석기를 사용하려고했는데 결과가 없습니다. (이미 소문자를 사용했기 때문입니다.) 여기에 대한 답을 보았을 때, 나는 멍청이를 깨닫고 대소 문자를 구분하고 XML로 전환했습니다. 완벽하게 작동합니다. 덕분에 –

답변

11

Nokogiri의 HMTL 구문 분석기를 사용하여 XML을 구문 분석하려고합니다. node을 XML 구문 분석기에서 사용하는 경우 rnil이므로 대소 문자를 구분합니다. rnil이 아니므로 대소 문자를 구분하지 않는 HTML 구문 분석기를 사용하고 있습니다.

>> 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 또는 r.children 통해 CDATA에서 얻을 수 있습니다 :

사용 노코 기리의 XML 파서와이 같은 일을 얻을 것이다.

+0

바하 .. 나는 HTML을 사용하여 대소 문자를 구분하려고했지만 어떤 결과도주지 못했고 그 이유를 알 수 없었기 때문에 소문자로 모두 놓았다. 나중에 Nokogiri의 XML 파서를 사용해 보았습니다.하지만 대소 문자를 무시하고 결과를 반환하지 않았습니다. XML과 대/소문자를 구분해야한다고 가정하고 내가 시도한 것과 작동했을 것입니다. 이것을 확인하고 결과를 알려 드리겠습니다. –

+0

모두 틀렸어. 나는 실수로 소문자를 사용하도록 HTML 구문 분석기를 사용하고있었습니다. 그런 다음 XML 구문 분석기를 사용하려고했는데 결과가 없습니다. (이미 소문자를 사용했기 때문입니다.) 여기에 대한 답을 보았을 때, 나는 멍청이를 깨닫고 대소 문자를 구분하고 XML로 전환했습니다. 완벽하게 작동합니다. 덕분에 –

+0

nokogiri_doc_object.xpath ("/ root/element"). children [0] .text – Alex

3

아하이피. @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?} 
관련 문제