2017-12-28 25 views
0

HTML 코드에서 버튼과 같은 태그의 DOM (Document Object Model)을 어떻게 얻을 수 있는지 알고 있습니까? 이것은 내가 지금까지있어 무엇 ...자바의 HTML 코드에서 태그의 문서 객체 모델 얻기

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

하지만이 오류가있어이 오류의 원인이 무엇

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 

를?

답변

0

당신은 이것을 위해 Jsoup를 사용할 수 있습니다. 클래스 경로에 추가하고

이 Jsoup에 최대 읽기 parents() 방법을 사용하여 부모 스택을 얻을 수 있습니다 전화를 선택 ("버튼")에서 검색 한 각 요소에이

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

Afterwhich처럼 사용 여기에 : https://jsoup.org/

0

귀하의 변수 d는, 끈으로 연결된 경우, (사용중인 현재 유형) [email protected] 같은 문자열을 반환하는 자바의 방법 toString()를 호출 형식 HTMLDocument의,이다.

자바 스크립트 개체 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-well 형식이 아닌 경우 Jericho와 같은 구문 호환을 허용하는 lib를 사용할 수 있습니다. – spi