Java Html解析器和关闭标签

时间:2010-04-26 19:17:33

标签: java html parsing

如何使用Java HTML Parser Library处理结束标记(例如:</h1>)?

例如,如果我有以下内容:

public class MyFilter implements NodeFilter {

 public boolean accept(Node node) {
  if (node instanceof TagNode) {
   TagNode theNode = (TagNode) node;
   if (theNode.getRawTagName().equals("h1")) {
    return true;
   } else {
    return false;
   }
  }
  return false;
 }
}

public class MyParser {
 public final String parseString(String input) {
  Parser parser = new Parser();
  MyFilter theFilter = new MyFilter();
  parser.setInputHTML("<h1>Welcome, User</h1>");
  NodeList theList = parser.parse(theFilter);
  return theList.toHtml();
 }
}

当我运行我的解析器时,我得到以下输出:

<h1>Welcome, User</h1>Welcome, User</h1>

NodeList包含一个大小为3的列表,其中包含以下实体:

(tagNode) <h1>

(textNode) Welcome, User

(tagNode) </h1>

我希望输出为“<h1>Welcome, User</h1>”。有没有人看到我的示例解析器出了什么问题?

2 个答案:

答案 0 :(得分:0)

提示:

我认为在这种情况下你必须依赖isEndTag() API。

答案 1 :(得分:0)

您的过滤器接受了太多节点。对于您的示例输入,您希望为NodeList标记创建仅包含单个节点的<h1>。其他两个节点是第一个节点的子节点,因此不应添加到NodeList


如果您添加以下代码,您可能会更好地看到问题所在。

for (Node node : theList.toNodeArray())
{
    System.out.println(node.toHtml());
}

应打印

<h1>Welcome, User</h1>
Welcome, User
</h1>