将html解析为树

时间:2015-10-20 09:45:48

标签: java html dom jsoup

我已经得到了以下的html结构:

<table>
    <tr>
        <td rowspan="2">
            NodeData
        </td>
        <td>NodeData</td>
        <td>
            NodeData
        </td>
        <td>NodeData</td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
    </tr>
    <tr>
        <td>NodeData</td>
        <td>
            NodeData
        </td>
        <td>NodeData</td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
    </tr>
</table>

然而,它(在某些情况下)也可以是垂直的:

<table>
    <tr>
        <td colspan="8">
            NodeData
        </td>
    </tr>
    <tr>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>NodeData</td>
        <td>NodeData</td>
        <td>NodeData</td>
    </tr>
    <tr>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td ">
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
        <td>
            NodeData
        </td>
    </tr>
</table>

现在我想把这些表变成树状结构,因为它们总是从单个元素分支出来。实现这一目标最简单的方法是什么?我设法想出的就是创建一个二维数组(表格表示)并迭代它,检查相邻节点中的colspan,但肯定有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以在此模式下阅读html代码,如xml

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(yourHtmlString));
Document doc = builder.parse(is);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("table");
if (nodeList.getLength() != 1)
    return null;
Node node = nodeList.item(0);
Element element = (Element) node;
NodeList nl = element.getElementsByTagName("tr");
...

我希望我能正确理解你的问题