循环HTML元素和节点

时间:2014-10-06 17:34:40

标签: html xml parsing jsoup

我正在处理HTML页面突出显示器项目,但当搜索字词是HTML标记元数据或类/ ID名称的名称时遇到问题;例如,如果搜索词是“媒体或类或内容”,那么我的查找和替换将执行此操作:

<link href="/css/DocHighlighter.css" <span style='background-color:yellow;font-weight:bold;'>media</span>="all" rel="stylesheet" type="text/css">
<div <span style='background-color:yellow;font-weight:bold;'>class</span>="container">

我正在使用Lucene突出显示我当前的代码(某种程度):

InputStreamReader xmlReader = new INputStreamReader(xmlConn.getInputStream(), "UTF-8");
if (searchTerms!=null && searchTerms!="") {
  QueryScorer qryScore = new QueryScorer(qp.parse(searchTerms));
  Highlighter hl = new Highlighter(new SimpleHTMLFormatter(hlStart, hlEnd), qryScore);
}

if (xmlReader!=null) {
  BufferedReader br = new BufferedReader(xmlReader);
  String inputLine;
  while((inputLine = br.readLine())!=null) {
    String tmp = inputLine.trim();
    StringReader strReader = new stringReader(tmp);
    HTMLStripCharFilter htm = HTMLStripCharFilter(strReader.markSupported() ? strReader : new BufferedReader(strReader));
    String tHL = hl.getBestFragment(analyzer, "", htm);
    tmp = (tHL==null ? tmp : tHL);
  }
  xmlDoc+=tmp;
}
bufferedReader.close()

正如你所看到的(如果你理解Lucene突出显示),这是一个不分青红皂白的发现/替换。由于我的文档将是HTML并且搜索条件由用户决定,因此我无法解析某些元素或标记。此外,由于find / replace基本上循环并将HTML附加到字符串(方法的返回类型),我必须保留所有HTML标记和值到位和顺序。我已经尝试使用Jsoup循环遍历页面,但处理HTML标记是一个重要结果。我也试过标记汤来删除由问题引起的破坏的HTML,但它无法正常工作。有谁知道如何基本循环html的元素和节点(数据值)?

1 个答案:

答案 0 :(得分:0)

我一直运气最好

StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" enconding=\"UTF-8\"?><!DOCTYPE html>");

Document doc = Jsoup.parse(txt.getResult());

Element elements = doc.getAllElements(); 
for (Element e : elements) { 
  if (!(e.tagName().equalsIgnoreCase("#root"))) {
    sb.append("<" + e.tagName() + e.attributes() + ">" + e.ownText() + "\n"); 
  }// end if
}// end for 
return sb; 

我仍然得到的一个障碍是嵌套并不总是正确地“修复”但仍然是半封闭的。我在这方面做得更多。