Weiß jemand, wie man Document Object Model (DOM) eines Tags wie Schaltfläche aus HTML-Code bekommen kann? Dies ist, was ich bisher bekommen habe ...Dokumentobjekt erhalten Modell eines Tags aus HTML-Code in Java
JEditorPane p = new JEditorPane();
p.setContentType("text/html");
p.setText(" <!DOCTYPE html>\\n\n" +
" <html dir=\"ltr\" lang=\"en\">\\n\n" +
" <head>\\n\n" +
" <meta http-equiv=\"Content-Type\" content=\"text/html; \" />\\n\n" +
" <title>Alidoosti</title>\\n\n" +
" </head>\\n\n" +
" <body>\\n\n" +
" <button id=\"miti\" type=\"submit\">Search</button>\n" +
" </body>\\n\n" +
" </html>\\n"); // Document text is provided below.
HTMLDocument d = (HTMLDocument) p.getDocument();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
try {
engine.eval("function getDomPath(el) {\n" +
" var stack = [];\n" +
" while (el.parentNode != null) {\n" +
" console.log(el.nodeName);\n" +
" var sibCount = 0;\n" +
" var sibIndex = 0;\n" +
" for (var i = 0; i < el.parentNode.childNodes.length; i++) {\n" +
" var sib = el.parentNode.childNodes[i];\n" +
" if (sib.nodeName == el.nodeName) {\n" +
" if (sib === el) {\n" +
" sibIndex = sibCount;\n" +
" }\n" +
" sibCount++;\n" +
" }\n" +
" }\n" +
" if (el.hasAttribute('id') && el.id != '') {\n" +
" stack.unshift(el.nodeName.toLowerCase() + '#' + el.id);\n" +
" } else if (sibCount > 1) {\n" +
" stack.unshift(el.nodeName.toLowerCase() + ':eq(' + sibIndex + ')');\n" +
" } else {\n" +
" stack.unshift(el.nodeName.toLowerCase());\n" +
" }\n" +
" el = el.parentNode;\n" +
" }\n" +
" return stack.slice(1); // removes the html element\n" +
"}"+
"var path = getDomPath("+d+".getElementById('miti'));\n" +
"console.log(path.join(' > '));");
Aber ich habe diesen Fehler:
javax.script.ScriptException: <eval>:26:60 Missing space after numeric literal
}var path = getDomPath([email protected]('miti'));
^in <eval> at line number 26 at column number 60
Was diesen Fehler verursacht?
danke für Ihre Antwort, in der Tat möchte ich DoM-Pfad (Document Object Model Pfad) aller Schaltflächen in HTML-Code in Java extrahieren. Hast du eine bessere Lösung? –
ja. entweder parse es mit einem DOM-Parser (wird https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html), mit einigen Xpath können Sie alle Schaltflächen und rekursiv abrufen Auf der Suche nach ihren Eltern finden Sie den absoluten Weg. Oder, wenn der HTML-Code nicht xml-well-formatiert ist, können Sie eine Bibliothek wie Jericho verwenden, die Syntax-tolerant ist. – spi