2017-12-28 26 views
0

HTMLコードからボタンのようなタグのドキュメントオブジェクトモデル(DOM)を取得する方法を知っている人はいますか?JavaのHTMLコードからタグのドキュメントオブジェクトモデルを取得する

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 

このエラーの原因となっているもの:これは私がこれまでに...

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(' > '));"); 

を持っている。しかし、私はこのエラーを得たものでしょうか?

答えて

0

これにはJsoupを使用できます。あなたのクラスパスに追加し、選択(「ボタン」)から取得した各要素についてAfterwhich

String html = "[YOUR HTML IN HERE]" 
Document doc = Jsoup.parse(html); 
Elements buttons = doc.select("button"); 

このようにそれを使用するあなたがJsoup上に読む parents()方法

を使用して親スタックを得ることができます呼び出しますここで:https://jsoup.org/

0

あなたの変数dは、文字列を連結し、型のHTMLDocumentのものである、[email protected]のような文字列を返します(現在使用しているタイプのための)JavaのメソッドtoString()を呼び出します。

javascriptオブジェクトdocumentを使用することをお勧めします。

あなたは何をしようとしていますか?これは、いくつかのx(ht)mlを解析する以外には、それほど複雑ではない方法と思われます。

+0

実際に私はjavaのHTMLコード内のすべてのボタンのDoMパス(ドキュメントオブジェクトモデルパス)を抽出したいと思います。もっと良い解決策はありますか? –

+0

はい。 DOMパーサー(https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html)を使用して解析するか、いくつかのxpathを使用してすべてのボタンを再帰的に取得できます彼らの両親を探して、あなたは絶対的な道を見つけるでしょう。あるいは、HTMLがXML形式でなければ、構文に寛容なJerichoのようなlibを使うことができます。 – spi

関連する問題