【问题标题】:Parsing html to a tree将 html 解析为树
【发布时间】:2016-01-18 21:57:03
【问题描述】:

我有以下 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,但肯定有更好的方法吗?

【问题讨论】:

    标签: java html dom jsoup


    【解决方案1】:

    在这种模式下,您可以像读取 xml 一样读取您的 html 代码

    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");
    ...
    

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

    【讨论】:

    • 读取它不是问题,因为我使用 JSoup 读取 html,我的问题是将 html 解析为树结构
    • 是的,但是结构不对吧?
    猜你喜欢
    • 2013-03-16
    • 2016-09-20
    • 1970-01-01
    • 2019-07-26
    • 2016-03-20
    • 2018-08-31
    • 2017-07-13
    • 2018-03-20
    • 2013-11-14
    相关资源
    最近更新 更多