Encontrando la última línea dentro del nodo con XPath

Me preguntaba si habría una manera de seleccionar siempre el contenido de un nodo sobre un elemento determinado.

Tengo el siguiente código del que quiero extraer:

Name

Some content1

Address 12345
09876 City, Country
12345

Aquí está el XPath que encuentra el contenido de todo lo que está por encima del intervalo:

 //div[@id="someDiv"]/span[@id="tel_number"]/preceding-sibling::node() 

Ahora, lo que necesito es una XPath que siempre seleccione el contenido justo encima del intervalo y nada más (una sola línea). También debería funcionar si (por alguna razón) el
sobre el intervalo faltaba.

Espero que alguien pueda ayudar con eso!

Tratar:

 (//div[@id="someDiv"]/span[@id="tel_number"]/preceding-sibling::text())[last()] 

o si quieres eliminar los espacios en blanco

 normalize-space((//div[@id="someDiv"]/span[@id="tel_number"]/preceding-sibling::text())[last()]) 

Encontré que la mejor manera de recuperar el código postal es la siguiente:

 data = page.search('(//div[@id="someDiv"]/span[@id="tel_number"]/preceding-sibling::node()').map{|data| data.text.cleanup} data.delete("") postcode = data.last.match(/\d{5}/).to_s 

Desde allí es fácil recuperar todo después o antes de la selección.

Quiero recuperar “09876 Ciudad, País” despojado de cualquier etiqueta HTML

Creo que lo siguiente que estás buscando es:

 //div[@id="someDiv"]/span[@id="tel_number"]/preceding-sibling::text()[1] 

Utilizando Nokogiri :

 require 'nokogiri' doc = Nokogiri::HTML::Document.parse <<-EOT 

Name

Some content1

Address 12345
09876 City, Country
12345
EOT doc.xpath("normalize-space(//div[@id='someDiv']/span[@id='tel_number']/preceding-sibling::text()[1])").to_s # => "09876 City, Country"