Suchen eines Knotens (oder in der Nähe davon) unter Verwendung von XPath in nicht wohlgeformt HTML

stimmen
3

Ich verwende XPath einen Knoten (oder so nahe daran) in einer Vorlage zu suchen, die nicht wohlgeformte HTML etwa 10 Ebenen tief ist. (Nein, ich habe dieses HTML nicht schreiben ... aber ich habe damit beauftragt worden, um durch sie zu graben.)

Ich scheine in der Lage sein einen XPath auf das betreffende Element mit dem XPartner Add-on für Firefox abzurufen; aber es gibt mir nur die Position in der Live-Website, und nicht in der Vorlage ich gegeben habe. (Die Schablone ist aus einem Nicht-Standard-Server-Side-Scripting-Sprache, gelesen, eine Sprache in-Haus gebaut)

Gibt es XPath-Tools Sie wissen, dass besonders gut sind durch nicht wohlgeformte HTML muddling.

Veröffentlicht am 09/12/2008 um 22:39
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

XPath arbeitet nicht direkt mit HTML. Das Zusammenspiel von XPath mit Ihrem HTML wird dictacted durch was auch immer Software / Bibliothek wird den HTML-Code in einen Rendering Baum Parsen. Dies kann helfen, entsprechend Ihrer Suche zu leiten.

Beantwortet am 09/12/2008 um 23:40
quelle vom benutzer

stimmen
4

XPath - Ausdrücke kann nicht agaist ein nicht-wohlgeformtes XML - Dokument ausgewertet werden , die genau der beschriebene Fall.

Es ist möglich, dies in zwei verkettete Schritte zu tun, von denen die erste ist, die HTML zu XML wohlgeformten zu konvertieren und dann die zweite - den XPath-Ausdruck anzuwenden.

Daher könnte die Frage mehr wird genau erklärt, wie „Wie HTML zu XML konvertieren, so dass XPath-Ausdrücke dagegen ausgewertet werden kann“.

Hier sind zwei gute Werkzeuge:

  1. Tagsoup , ein Open-Source - Programm , ist eine Java und SAX - basiertes Tool, entwickelt von John Cowan . Dies ist ein SAX-konformen Parser in Java geschriebendie, statt Parsen wohlgeformt oder gültige XML, HTML analysiertwie es in der freien Naturfinden ist: schlecht, böse und brutal, aber recht oft weit von kurz. Tagsoup ist für Leutedie haben das Zeug zu verarbeiteneinen Anschein einer rationalen Anwendung Design. Durch einen SAXSchnittstelle bereitstellt, ermöglicht es StandardXMLTools sogar das Schlimmste HTML angewandt werden. Tagsoup enthält auch eine Befehlszeilenprozessor,HTMLDateien liest und kann entweder sauber HTML oder wohlgeformten XML erzeugendie eine enge Annäherung an XHTML ist. Taggle ist ein kommerzieller C ++ Hafen von tagsoup.

  2. SgmlReader ist ein Werkzeug von Microsoft entwickelte Chris Lovett . SgmlReader ist ein XmlReader API über jedes SGML Dokuments (einschließlich Unterstützung für HTML gebaut). Ein Befehlszeilenprogramm ist ebenfalls vorgesehenwelche gibt das Ergebnis gut XML gebildet. Ladendie ZipDatei einschließlich der eigenständige ausführbare Datei und den vollständigen Quellcode: SgmlReader.zip

  3. Die reinen XSLT 2.0 Parser von HTML geschrieben von David Carlisle . Seine CodeLese wäre eine große Lernübung für jeden von uns sein.

Aus der Beschreibung:

„D: htmlparse (string) d: htmlparse (string, Namensraum, html-Modus)

Die eine Form Argument entspricht) d: htmlparse (string, ' http://ww.w3.org/1999/xhtml ', true ()))

Analysiert die Zeichenfolge als HTML und / oder XML einige eingebaute Heuristik) Kontrolle implizierte Öffnen und Schließen von Elementen.

Es hat keine Kenntnis von HTML-DTD aber hat vollständige Liste der leeren Elemente und vollständige Liste der Entity-Definitionen. HTML-Entitäten, und Dezimal und Hex-Zeichenreferenzen werden alle angenommen. Hinweis HTML-Entitäten werden, auch wenn html-mode = false () erkannt.

Elementnamen werden klein geschrieben (wenn HTML-Modus wahr ist ()) und in den Namensraum durch die Namespace-Parameter angegeben gesetzt (die „können“ no-Namensraum bezeichnen, es sei denn, die Eingangsnamespace-Deklarationen EXPLICT hat, wobei in diesem Fall diese geehrt werden .

Attributnamen werden klein geschrieben, wenn HTML-Modus = true ()“

Lesen Sie eine ausführliche Beschreibung hier .

Beantwortet am 10/12/2008 um 03:21
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more