2017-01-15 2 views
0

У меня есть следующий XML-документ:Как выбрать только узлы, которые являются не только пробелами, использующими Nokogiri?

<w:p w14:paraId="572705D7" w14:textId="77777777" w:rsidP="00CA0169" w:rsidR="00CA0169" w:rsidRDefault="00CA0169" w:rsidRPr="00777A35"> 
    <w:r> 
     <w:t xml:space="preserve"/> 
    </w:r> 
    <w:r> 
     <w:t>synthesized in cyanobacteria under unsuitable condition</w:t> 
    </w:r> 
</w:p> 

Я в настоящее время выбрать все узлы, которые начинаются с следующим образом:

text_nodes = p.xpath('w:r') 

Однако, я хотел бы, чтобы выбрать только те текстовые узлы, содержащие текст и являются не только пробелы, как первый узел, как показано в примере xml выше.

я продлил Струнный класс, чтобы проверить для пространств следующим образом:

class String 
    def spaces? 
    x = self =~ /^\s+$/ 
    x == 0 
    end 
end 

Так что я могу сделать:

element.text.spaces? 

Я просто не знаю, как поставить его вместе с p.xpath('w:r') для выбора только узлов, которые являются НЕ только пробелами.

ответ

1
w:r[normalize-space(.) != ''] 

как ваше выражение XPath должно делать.

+0

Спасибо zc485. Будет ли это работать для любого количества пробелов или всего лишь одного пространства? – chell

+0

'normalize-space' удаляет все начальные и конечные пробелы, равные пустой строке, если другие символы не присутствуют. – zx485

Смежные вопросы