Nokogiri und Xpath: Finde den gesamten Text zwischen zwei Tags

Ich bin nicht sicher, ob es um Syntax oder Versionsunterschiede geht, aber ich kann das nicht herausfinden. Ich möchte Daten aufnehmen, die sich in einem (nicht schließenden) befinden.td von demh2 tag zumh3 Etikett. So würde der HTML-Code aussehen.

<td valign="top" width="350">
    <br><h2>NameIWant</h2><br>
    <br>Town<br>

    PhoneNumber<br>
    <a href="mailto:[email protected]" class="links">[email protected]</a>
    <br>
    <a href="http://websiteIwant.com" class="links">websiteIwant.com</a>
    <br><br>    
    <br><img src="images/spacer.gif"/><br>

    <h3><b>I want to stop before this!</b></h3>
    Lorem Ipsum Yadda Yadda<br>
    <img src="images/spacer.gif" border="0" width="20" height="11" alt=""/><br>
    <td width="25">
        <img src="images/spacer.gif" border="0" width="20" height="8" alt=""/>
        <td valign="top" width="200"><img src="images/spacer.gif"/>
            <br>
            <br>

            <table cellspacing="0" cellpadding="0" border="0"/>205"&gt;<tr><td>
                <a href="http://dontneedthis.com">
                </a></td></tr><br>
            <table border="0" cellpadding="3" cellspacing="0" width="200">
            ...

Das<td valign> wird erst ganz unten auf der Seite geschlossen, was meiner Meinung nach der Grund für meine Probleme sein könnte.

Mein Ruby-Code sieht so aus:

require 'open-uri'
require 'nokogiri'

@doc = Nokogiri::XML(open("http://www.url.com"))

content = @doc.css('//td[valign="top"] [width="350"]')

name = content.xpath('//h2').text
puts name // Returns NameIwant

townNumberLinks = content.search('//following::h2')
puts content // Returns <h2> NameIWant </h2>

Wie ich es verstehe, sollte die folgende Syntax "Alles im Dokument nach dem schließenden Tag des aktuellen Knotens auswählen". Wenn ich versuche zu benutzenpreceding mögen:

townNumberLinks = content.search('//preceding::h3')
// I get: <h3><b>I want to stop before this!</b></h3>

Hoffe, ich habe deutlich gemacht, was ich versuche zu tun. Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage