2011-01-13 2 views
3
src = '<paragraph>And bla foo <note>not important</note> bar baz</paragraph>' 
doc = Nokogiri::XML(src) 
puts doc.xpath('paragraph').first.content 

반환 위의 코드와 중첩 된 요소없이 컨텐츠를 얻을 : 나는 중첩 된 요소없이 컨텐츠를 얻을 수있는 방법을 찾고 있어요어떻게 노코 기리

"And bla foo not important bar baz" 

. 사건은 위의 단지 XML 예제이지만,이 예제에서 나는 결과로이 원하는 : 나는 수년 동안 분노 XPath를 사용하지 않는 한

"And bla foo bar baz" 

답변

7
puts doc.xpath('paragraph/child::text()') 

하지만이 작동하는 것 같다.

또는 더 나은 아직 :

puts doc.xpath('paragraph/child::text()').to_s.squeeze(' ') 
+1

스퀴즈는 문자열을 '줄이고 bla fo bar baz '- o를 줄일 수 있습니다 :-) 대신 squeeze (' ')를 추가해야합니다 – HakonB

+0

고정, 고마워요 @HakonB :-) – noodl

2

당신이 할 수있는 일 귀하의 예제에서 '즐 foo는 바 바즈을 그리고'리턴

doc.xpath('paragraph').children.map { |e| e.text if e.text? }.join 

등이

+0

이렇게하면 XML DOM의 모든 노드가 s 노드로 검사됩니다. 텍스트 노드이면 ee. 'text()'노드 만 요구하는 편이 낫습니다. 그것은 큰 문서에서 엄청난 절약 일 수 있습니다. –