проблема с htmlparser - PullRequest
       10

проблема с htmlparser

0 голосов
/ 05 апреля 2011

с использованием htmlparser (http://htmlparser.sourceforge.net/) Я пытался извлечь информацию (Content1 + Link) из таблицы html.

образец HTML:

<td class="xx">
    <a href="http://link">Content1</a>
</td>

Java-код:

CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("td[class=\"xx\"]");
NodeList nodes = parser.parse(cssFilter);

resultSet = new String[nodes.size()][2];

for (int i=0;i<nodes.size();i++) {
    resultSet[i][0]=nodes.elementAt(i).toPlainTextString().trim();

    LinkTag tag = (LinkTag) (nodes.elementAt(i));
    resultSet[i][1]=tag.getLink();
}

Я могу извлечь первую часть (строку Content1) без проблем, но у меня возникают проблемы при получении ссылки. Он либо говорит, что я не могу привести к TextNode (с кодом выше), либо возвращает null.

как указано выше - результат: TableColumn нельзя привести к LinkTag

LinkTag tag = (LinkTag) (nodes.elementAt(i));
resultSet[i][1]=tag.getLink();

результат: TextNode не может быть приведен к LinkTag

   LinkTag tag = (LinkTag) (nodes.elementAt(i).getFirstChild());
    resultSet[i][1]=tag.getLink();

результат: NullPointer

 LinkTag tag = (LinkTag) (nodes.elementAt(i).getFirstChild().getFirstChild());
    resultSet[i][1]=tag.getLink();

результат: возвращает ноль

 Tag tag = (Tag) (nodes.elementAt(i));
    resultSet[i][1]=tag.getAttribute("href");

Спасибо за любые идеи / решения =)

1 Ответ

4 голосов
/ 05 апреля 2011

Если вы распечатываете содержимое тега <TD>, вы получаете:

Tag (27[2,8],42[2,23]): td class="xx"
  Txt (42[2,23],56[3,12]): \n
  Tag (56[3,12],75[3,31]): a href="foo.html"
    Txt (75[3,31],78[3,34]): bar
    End (78[3,34],82[3,38]): /a
  Txt (82[3,38],92[4,8]): \n
  End (92[4,8],97[4,13]): /td

Поэтому вы хотите, чтобы вы были в брате с первым дочерним элементом ТД - хотя вы тогда на милостилюбого формата в таблице.

Чтобы найти первую ссылку в данных таблицы, вы можете использовать этот код:

public static void main(String[] args) throws Exception {
    Parser parser = new Parser("file:test.html");
    CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("td[class=\"xx\"]");
    NodeList nodes = parser.parse(cssFilter);
    String[][] resultSet = new String[nodes.size()][2];
    for (int i=0;i<nodes.size();i++) {
        Node n = nodes.elementAt(i);
        System.out.println(n); // DEBUG remove me!
        resultSet[i][0]=n.toPlainTextString().trim();
        resultSet[i][1]=null;
        Node c = n.getFirstChild();
        while( c!=null ) {
            if( c instanceof LinkTag ) {
                resultSet[i][1] = ((LinkTag) c).getLink();
                break;
            }
            c = c.getNextSibling();
        }

        System.out.println(i+" text :"+resultSet[i][0]); // DEBUG remove me!
        System.out.println(i+" link :"+resultSet[i][1]); // DEBUG remove me!
    } 
}
...