XPath kann nicht finden eine Tabelle mit id
Ich mache ein paar screen scraping mit WATIJ, aber man kann es nicht Lesen von HTML-Tabellen (wirft NullPointerExceptions oder UnknownObjectExceptions). Um dies zu überwinden ich lese den HTML-Code und führen Sie es durch JTidy um wohlgeformtes XML.
Möchte ich analysieren, es mit XPath, aber es nicht finden können, ein <table ...>
durch id
obwohl die Tabelle gibt es in der XML-Ebene als Tag. Hier ist mein code:
XPathFactory factory=XPathFactory.newInstance();
XPath xPath=factory.newXPath();
InputSource inputSource = new InputSource(new StringReader(tidyHtml));
XPathExpression xPathExpression=xPath.compile("//table[@id='searchResult']");
String expression = "//table[@id='searchResult']";
String table = xPath.evaluate(expression, inputSource);
System.out.println("table = " + table);
Dem Tisch ist ein leerer String.
Die Tabelle ist im XML -, jedoch. Wenn ich drucken Sie die tidyHtml
String zeigt es
<table
class="ApptableDisplayTag"
id="searchResult"
style="WIDTH: 99%">
Habe ich nicht verwendet XPath so vor, vielleicht bin ich etwas fehlt.
Kann jemand mich gerade? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, etwas über JTidy, aber ich für WATIJ, ich glaube, der Grund, dass Sie immer die NullPointer und UnknownObject Ausnahmen, weil Ihr XPATH ist eine niedrigere Gehäuse-Knoten. Also sagen wir, Sie sind mit "//table[@id='searchResult']" als xpath-lookup-Tabelle in WATIJ. Das wird nicht wirklich funktionieren, weil die "Tabelle" ist in Kleinbuchstaben. Für WATIJ, müssen Sie alle die node-Namen in Großbuchstaben, z.B.: "//TABLE[@id='searchResult']". Als ein Beispiel, sagen, die Sie drucken möchten die Anzahl der Zeilen der Tabelle mit WATIJ, solltest du Folgendes tun:
Dieser code oder die Antwort kann nicht richtig sein, da habe ich nur angefangen mit WATIJ heute. Obwohl ich lief in das gleiche genaue problem mit XPath-Ausdrücken. Hat mich ein paar Stunden suchen/testen, bevor ich bemerkte, wie alle xpaths umkleidet wurden auf diese Seite: WATIJ-Benutzerhandbuch Einmal wechselte ich das Gehäuse in meinem xpaths, WATIJ in der Lage war, die Objekte zu finden, so sollte dies für Sie arbeiten.
youe xPath korrekt ist... was auch immer es ist, das ausfällt, das ist es nicht.
Ich nie benutzt die XPath-API von Java direkt, ich immer durch dom4j oder in andere Sprachen (Perl, C). Aber ich habe ein gutes Verständnis, wie es normal funktioniert. Zunächst sollten Sie wahrscheinlich analysiert die Eingabe als ein DOM-Dokument, das wird sehr helfen. Auch wenn Sie wissen, dass Ihr Dokument-ID, die Sie sollten analysieren, es mit dem laden der DTD oder dem Schema, das beschreibt es auf diese Weise der XML-parser markieren und identifizieren die Knoten, die richtigen IDs. Sobald Sie dies getan haben, können Sie Ihren code mit den DOM-Baum.
In der Dokumentation von [XPath.evaluate(Ausdruck, Element)](http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPath.html#evaluate(java.lang.String,%20java.lang.Object) zeigt, dass das zweite element sollte ein Knoten oder NodeList. Dies ist wahrscheinlich, warum Sie viel UnknownObjectExceptions.
Wenn Ihr XML-parser ist in der Lage, zu erkennen, die ID-Elemente, dann können Sie den Zugriff auf ein element mit einer ID mit dem folgenden XPath-Ausdruck:
Mit der XPath-Funktion id () - ist die effizienteste Möglichkeit für den Zugriff auf Elemente, wenn die Elemente werden mit einer ID und erklärt wurden, in einer solchen Art und Weise, in der DTD oder dem Schema.
Wie es aussieht, das problem ist meist mit JTidy. Ich kann xpath zum Parsen der JTidy-ied Ergebnis, indem Sie Folgendes tun:
Entfernen Sie alle "<& - >nbsp;". JTidy gibt xhtml mit "<& - >nbsp;" außerhalb des tags.
Entfernen Sie die
In der tag-entfernen des xmlns=... Attribut
Entfernen Sie die "Kopf" - tags.
(Ich usee einige komische Formatierung, da die HTML-Entitäten wird nicht angezeigt, wenn Sie eingegeben korrekt)
JTidy stellt auch Zeilenumbrüche in die Mitte des text-Inhalt, wenn Elemente....
Werde ich haben, um andere HTML -> XML-Konvertierung Optionen. Ich gab Cobra einen schnellen Versuch, aber auch nicht zu finden, der meine Tabelle nach Id. Ich habe nicht versucht, manuell reinigen, bis das Ergebnis von Cobra, also ich weiß nicht, wie es im Vergleich zu JTidy.
Wenn Sie wissen, dass ein HTML-parser, der gibt gute XML-lassen Sie es mich bitte wissen.
War die Lösung, Tropfen WATIJ und wechseln Sie zu Google WebDriver. WebDriver Dokumente wie verschiedene Browser behandeln den Fall, in xpath-Anweisungen.
Anführungszeichen sind definitiv nicht erforderlich, und weder in Großbuchstaben ist. Namespaces und/oder die DTD eher die Antwort.
Uniue ID-Attribute zugegriffen werden muss durch die id ( ) - Methode
id('search')