захватить текст между двумя элементами в нокогири? - PullRequest
4 голосов
/ 12 октября 2010
<body>
 <div>some text</div>
 I NEED THIS TEXT ONLY
 <div>some text</div>
 more text here
 <div>some text</div>
 one more text here
 <div>some text</div>
</body>

Как?

Ответы [ 4 ]

5 голосов
/ 12 октября 2010

Использование :

/*/div[1]/following-sibling::text()[1]

Выбирает первого брата по текстовому узлу первого div дочернего элемента верхнего элемента документа.

0 голосов
/ 12 октября 2010

возвращает первый текстовый узел в body между двумя div элементами:

/body/text()[
     ./preceding::element()[1][local-name()="div"] and 
     ./following::element()[1][local-name()="div"]
][1]

должен вернуть

I NEED THIS TEXT ONLY
0 голосов
/ 12 октября 2010

Это XPath 1.0:

/body/text()[preceding-sibling::*[1][self::div]]
            [following-sibling::*[1][self::div]][1]

Также:

/body/text()[normalize-space()][1]
0 голосов
/ 12 октября 2010

У меня нет нокогири, но есть альтернатива, использующая только базовые манипуляции со строками.

html=<<EOF
<body>
 <div>some text</div>
 I NEED THIS TEXT ONLY
 <div>some text</div>
 more text here
 <div>some text</div>
 one more text here
 <div>some text</div>
</body>
EOF
p html.split(/<\/*body>/)[1].split(/<\/div>/)[1].split(/<div>/)[0]
...