Java Html Parser и закрывающие теги - PullRequest
1 голос
/ 26 апреля 2010

Как обрабатывать закрывающие теги (например: </h1>) с помощью библиотеки HTML-анализатора Java?

Например, если у меня есть следующее:

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 голосов
/ 26 апреля 2010

Ваш фильтр принимает слишком много узлов. Для вашего примера ввода вы хотите создать NodeList, который имеет только один узел - для тега <h1>. Два других узла являются дочерними для этого первого узла, поэтому их не следует добавлять в NodeList.


Если вы добавите следующий код, вы можете лучше понять, в чем проблема.

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

Следует напечатать

<h1>Welcome, User</h1>
Welcome, User
</h1>
0 голосов
/ 26 апреля 2010

ПОДСКАЗКА:

Я думаю, вы должны полагаться на isEndTag () API в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...