java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > XML und Co.

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 21.07.2012, 22:19   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Standard XPath in Java

Hi zusammen ,

ich probiere gerade eine HTML Datei runterzuladen und per XML bestimmte Informationen heraus zubekommen und meine nerven werden dabei durch die XPath API sehr stark strapaziert.

Hab mir zum Testen und rausbekommen des XPath das FireBug Plugin FirePath installiert das gute Stück funktioniert auch einwandfrei. Nehme ich allerdings die selbe XPath Anweisung in Java kommt nichts dabei raus.

Beispiel:
Die Webseite könnte wie folgt aussehen:
Code:
<html>
  <head>
  </head>
   <body>
        <div>
              <div id="content"><h4></h4><div></div></div>
          </div>
     </body>
</html>
Wobei hier die Struktur natürlich nur Skizziert wird in den einzelnen Ebenen sind z.T. noch mehr Elemente enthalten (unter dem div mit der id="content" allerdings nur ein weiterer div!)

Beispiel für eine XPath abfrage:
Code:
//*[@id='content']
Ergibt in Java mit java.xml.xpath.* ein Ergebnis.

Code:
//div[@id='content']
oder
Code:
//*[@id='content']/div
letztere beiden geben kein Ergebnis zurück. In FirePath funktionieren jedoch alle 3...

Ich hoffe ihr könnt mir auf die Sprünge helfen :/

Vielen Dank schonmal!
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 21.07.2012, 22:34   #2 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Registriert seit: 02.07.2009
Fachbeiträge: 5.349
Blog-Einträge: 1
Abgegebene Danke: 12
Erhielt 1.061 Danke für 1.053 Beiträge
Zeige doch mal auf wie du es in Java versuchst. Bei mir gehen auch die beiden von dir geposteten Ausdrücke in Java....
__________________
Gruß Basti
eRaaaa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 22.07.2012, 00:46   #3 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Ok, habe mir das ganze jetzt nochmal in einem kleinen Testprojekt angeschaut und festgestellt, dass der XPath so funktioniert. Was mich dazu bringt, dass das worauf der XPath laufen soll nicht stimmig ist.

Den Code zum Downloaden und einlesen habe ich allerdings nicht selbst geschrieben und habe jetzt probiert ihn neu zu implementieren, allerdings scheitere ich immer wieder daran, dass beim Wandeln des Inputs in ein Document oder Node eine Fehlermeldung wie folgt ausgegeben wird: "org.xml.sax.SAXParseExceptionpublicId: -//W3C//DTD HTML 4.01 Transitional//EN; systemId: http://www.w3.org/TR/html4/loose.dtd; lineNumber: 31; columnNumber: 3; Deklaration für Entität "HTML.Version" muss mit ">" enden."

Habe schon verschiedene möglichkeiten ausprobiert und komme eigentlich immer wieder auf diesen Fehler.

Der Fehler wird zwar in der Konsole als Schwerwiegend bezeichnet, allerdings wird die Webseite im Browser ohne Probleme angezeigt, daher kann er ja schonmal nicht ganz so Schwerwiegend sein.
Auf den HTML Code hab ich allerdings keinen Zugriff kann man beim konvertieren nicht einfach irgendwie die Fehler ignorieren? Oder muss ich mir ne andere Bibliothek holen?

Vielen Dank schonmal! Viele Grüße!
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 22.07.2012, 07:08   #4 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von Marcinek
 
Registriert seit: 12.07.2010
Fachbeiträge: 3.755
Abgegebene Danke: 158
Erhielt 440 Danke für 429 Beiträge
Hi,
Du meist unterschieden zwischen html und XML.. HTML ist zwar in XML Notation geschrieben ist aber bei den seltensten Homepages wirklich wohl geformt..

Der Browser kann diese Fehler überlesen korrigieren oder ähnliches. Der Sa Parser erwartet aber eine vollständig korrekte XML Datei..
__________________
Wie man Fragen richtig stellt.

Bei jedem Thread kommt nach einer völlig absurden Fehlerbeschreibung ein "habs gelöst" mit einer teils noch absurderen Lösung.
(timbeau)
Marcinek ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 09.08.2012, 15:47   #5 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 03.05.2012
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Hi!

ich habe Probleme mit dem FF auf Map-areas zuzugreifen und zu testen(click)

html:
<map name="clickareas" id="clickareas">
<area alt=11 ...
<area alt=12 ...
<area alt=13 ...
</map>

Zahlreiche Versuche wie
ff.findElement(By.xpath("//area[@alt=12]")).click();
haben nichts gebracht.

wer hat Ideen??
Dune ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 09.08.2012, 16:46   #6 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 25.12.2011
Fachbeiträge: 180
Abgegebene Danke: 12
Erhielt 14 Danke für 14 Beiträge
Deine Ausgangsstruktur ist kein valides XML, deswegen greift der XPath nicht.

Laut XML-Spezifikation müssen attribute gequoted werden (entweder mit " oder in Fällen wo der Wert selbst " enthält mit ').

Diese Einschränkung ist in HTML nicht zwingend. Deswegen hast du hier genau den Fall erwischt, wo du auf einem durchaus validen HTML-Dokument nicht mit einem XPath arbeiten kannst.


Zum Testen von XPath verwende ich meist:

Allans Online XPath Tester (@Admins: Sorry, falls linken nicht erlaubt sein sollte)
DerFeivel ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2012, 18:14   #7 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von fassy
 
Registriert seit: 08.12.2006
Fachbeiträge: 1.465
Abgegebene Danke: 0
Erhielt 248 Danke für 237 Beiträge
Zitat: DerFeivel
Beitrag anzeigen
Allans Online XPath Tester (@Admins: Sorry, falls linken nicht erlaubt sein sollte)
Sehr gut ist auch der XPath Visualizer:
XPath Visualizer
__________________
Death by stereo!
fassy ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 13.08.2012, 11:49   #8 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 03.05.2012
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
DerFeivel hat es erfasst gehabt. Danke!

also... das ist wirklich kein reguläres xml.
Für die Nachwelt der Versuch einer kleinen Beschreibung.

Praktisch liegen in meinem Fall alle Elemente übereinander und werden irgendwie später mit coords versetzt, was natürlich der Parser nicht erkennt. Darum habe ich auch egal bei welchem Inde immer dasselbe Element angesteuert... nämlich das, welches bis oben auf der "Liste" liegt.

Glücklicherweise haben die graphischen Elemente ein Testfeld darüber, welche ich dann über das style-Attribute area.getAttribute("style") verglichen habe und das entsprechende area dann .clicken konnte
Dune ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 13.08.2012, 19:16   #9 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 03.05.2012
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Hi,
ich nochmal...

gibt es die Möglichkeit ein nicht regulären Ausdruck(Auszug erste area) trotzdem abzufragen oder schlägt die Anfrage schon fehl?
Verdeutlichung:

html:
<map name="clickareas" id="clickareas">
<area href="xxx.php?id=19"
coords="110,95,132,80,132,81,160,82,179,96,179,151,158,163,128,163,109,150"
shape="poly" alt="raise <span class="level">Stufe 2</span>||Ausbau <br /> </div>">
<area alt=...
<area alt=...
</map>

Ansatz: mit dem alt-attribut arbeiten
ich schaffe es die href in eine Liste zu legen oder auch zu vergleichen
? wie rufe ich aber die url auf ohne .click() ?
? mit Bedingung:
rufe url welche(alt='rai%') hat! (vergleiche die ersten 3Char) (String.equal() funktioniert ja dann, wenn ich schon auf einfache datentypen runter reisen muss...)
Dune ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 15.04.2013, 21:09   #10 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 03.05.2012
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Ich bin noch ne Antwort schuldig...

also es war von Anfang an richtig... Problem war, dass die Elemente alle übereinander lagen.
Darum habe ich immer dasselbe erhalten.
Wie und warum weiß ich nicht mehr, aber gelöst habe ich das ganze indem ich das Textfeld, das über jedem Element liegt ausgewählt habe. damit habe ich auf die richtige Position "klicken" können und es funktionierte.

besten Dank an alle Antworten
Dune ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 16.04.2013, 05:18   #11 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Fachbeiträge: 7.461
Abgegebene Danke: 70
Erhielt 566 Danke für 525 Beiträge
Wenn du HTML einlesen willst brauchst du einen sehr "Fehler toleranten" XML / HTML Parser wie z.B. jsoup Java HTML Parser, with best of DOM, CSS, and jquery oder JTidy - JTidy (wenn du einen Standard Java DOM haben willst).
__________________
Lycia: Listener principle based XML Processor http://code.google.com/p/lycia
Apache Lightning: Fast Pojo-Serializer http://directmemory.apache.org/lightning
Apache DirectMemory: BigMemory like in-memory cache http://directmemory.apache.org
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java als Programmiersprache für kommerzielle Spieleentwicklung? Miikku Spiele- und Multimedia-Programmierung 3 11.11.2011 07:07
java versionen problem sirius76 Java Basics - Anfänger-Themen 20 26.08.2011 10:59
Error outside Java Virtual Machine uzi981 Allgemeine Java-Themen 26 24.01.2011 09:04
Java lädt mit Firefox 3.5.5 nicht mehr! Windows 7 19_Dan_88 Für Verirrte - Fragen zu JavaScript 3 27.12.2009 23:18


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de