HTML-Code auslesen und mit einem Wert in der property-Datei vergleichen

Hallo Leute,

ich bin ein Anfänger und habe diverse Probleme bei der Programmierung des Sachverhaltes (unten):

Ich möchte aus einer HTML-Datei zwischen ABC 56 die 56 auslesen können, die sich bei jedem Aufruf der Seite ändert.

Dazu lade ich die Seite mit:

URL url = new URL("file:/C:/Users/irgendwer/bsp.xhtml");
        URLConnection connection = url.openConnection();
        
        
        //Einlesen der Seite in einen stream
        
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

daher hatte ich mir überlegt folgendermaßen vorzugehen,
um mich an SPAN und ID zu orientieren und so die Ergebnisse zu bekommen, die in einem SPAN-Tag die ID als Attribut haben.
Doch damit bekomme ich die Werte der IDs, in diesem Fall “irgendwas”.

HTMLEditorKit editorKit = new HTMLEditorKit();
        
        HTMLDocument htmlDoc = new HTMLDocument();
        
        editorKit.read(in, htmlDoc, 0);
 
        HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.SPAN);
        
        
        while( iter.isValid()){
            
          String str = iter.getAttributes().getAttribute(HTML.Attribute.ID).toString();
          
          iter.next();
          
          System.out.println(str);

Ich habe eine Property-Datei erstellt, die 100 Werte enthält. Je nach vorher aus der HTML-Datei geholter Zahl soll in der Property -Datei die gleiche Zahl key (1-100) gefunden und der Wert der key in einer Variable gespeichert werden, um es später weiterverarbeiten zu können.

Dazu habe ich :

public void wertausprop(){
        Properties prop = new Properties();
        
        try{
            
            //load
            prop.load(new FileInputStream("../Testen/src/wert.properties"));
            
            //get value 
            //System.out.println(prop.getProperty());
            
            
        } catch (IOException ex){
            ex.printStackTrace();
            }
        }

versucht.
Kann mir bitte jemand weiterhelfen ?``````

Es ist zwar nicht gelöst. Ich konnte aber nicht veröffentlichen, bevor ich ein Präfix gewählt habe. Als Präfix ist leider nur gelöst wählbar :slight_smile:

Hi

Das mit dem “gelöst” wird neuerdings öfter behauptet, da wird wohl gerade mal danach gesehen…

Kannst du genauer sagen, was die Frage ist? Geht es um die Properties oder das Auslesen der HTML? (Ich habe HTMLEditorKit noch nicht verwendet - zum Zerpflücken von “real life”-HTML-Code fand ich http://jericho.htmlparser.net/docs/index.html immer ganz gut, aber wenn’s das EditorKit wie gewünscht tut wäre das ja auch OK)

bye

Ich möchte in einer HTML-Seite eine Zahl finden, beispielsweise die 46 und dann in der Property-Datei den Wert des 46. Key rausholen und diesen in einer Variable speichern.

Zum Finden der Zahl 46 im HTML-Code weiß ich nicht wie ich vorgehen soll, um aus z.B:

ABC 46 die Zahl 46 zu filtern und weiterzuverarbeiten.

Dazu müßte man ggf. genauer wissen, was (abgesehen von der Zahl, um die es geht) dort noch so alles drin stehen kann…

package bytewelt;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class HTMLReaderTest
{
    public static void main(String[] args) throws IOException, BadLocationException
    {
        String s = 
            "<html>" + "
" +
        	"    <span ID=\"irgendwas\">ABC 56</span>" + "
" +
            "</html>" + "
";
        	
        InputStream in = new ByteArrayInputStream(s.getBytes());
        read(in);
        in.close();
    }

    private static void read(InputStream in) throws IOException, BadLocationException
    {
        HTMLEditorKit editorKit = new HTMLEditorKit();
        HTMLDocument htmlDoc = new HTMLDocument();
        editorKit.read(in, htmlDoc, 0);

        HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.SPAN);
        while (iter.isValid())
        {
            AttributeSet attributes = iter.getAttributes();
            Object attribute = attributes.getAttribute(HTML.Attribute.ID);
            String attributeString = String.valueOf(attribute);
            System.out.println("Attribute: "+attributeString);
            
            int i0 = iter.getStartOffset();
            int i1 = iter.getEndOffset();
            String text = htmlDoc.getText(i0, i1-i0);
            System.out.println("Text between "+i0+" and "+i1+" is: "+text);
            
            int lastSpace = text.lastIndexOf(" ");
            if (lastSpace != -1)
            {
                String numberString = text.substring(lastSpace+1);
                System.out.println("Presumably the number: "+numberString);
            }
            
            iter.next();
        }
    }

}

Nehmen wir ein Beispiel:

In einer Webseite gibt es im registrierten User-Bereich (also bereits mit Passwort eingeloggt) für eine bestimmte Aktivität die Regel eine Zeichenfolge (beispielsweise PIN) einzugeben, um fortfahren zu können.
Diese wird zufällig generiert und landet im Quellcode als String im Span-Tag wie ABC 46.
Nun möchte ich diese zufällige Zahl rausfiltern, die zugehörigen Wert aus der Property-Datei holen und diese auf der Webseite in das zugehörige Feld eingeben.

Und inwieweit macht der gepostete Code NICHT genau das? Er filtert diese “46” raus. Ziemlich hakelig, aber ohne mehr Informationen kann man es kaum sinnvoll umsetzen.

Marco ertsmal danke für deine hilfreichen ANtworten!
Ich möchte, dass das Programm sich mit der jeweiligen url verbindet. Den HTML-Code ladet und in dem COde nach dem Abschnitt ABC 46. sucht. Da ABC gleich bleibt auch wenn sich die 46 ändert muss es einen Weg geben, dass ich bei < anfange und weiterlese bis C kommt. dann vorgehe bis wieder < kommt und dann die Zahl 46 irgendwie raushole. Danke vielmals. Hättest du dafür vlt. ne Lösung ?
Sonst passt dein Code mit dem string in der Main.

Der Gepostete code sucht das „span“-Tag, und extrahiert den Text (‚text‘) der IN diesem Span-Tag steht. Aus diesem Inhalt sucht er dann noch den ‚numberString‘ raus, also die 46. Ich weiß nicht, was du willst :confused:

Hallo Marco,

danke für die Hilfe. Jetzt läuft es. Ich hatte aufgehört mitzudenken :slight_smile: