如何使用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>
”。有没有人看到我的示例解析器出了什么问题?
答案 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>