在jSoup中获取元素标记路径

时间:2013-03-23 23:32:44

标签: java html jsoup

是否有一种有效的方法可以使用jSoup获取所有打开但未关闭的标记的HTML元素标记路径?

E.g。如果HTML是

<!DOCTYPE html>
<html>
    <head>...</head>
    <body>
        <section id="secID">
            <div class="divClass">
                <section id="subSection">
                    <h3>Heading</h3>
                     <ul class="list">
                        <li>

当我到达li时,我希望其路径为html->body->section->div->section->ul

2 个答案:

答案 0 :(得分:1)

我相信一个好方法是通过children()方法see here检查你所在的元素是否有子节点。如果它已经将该元素放入列表中并继续使用它的第一个子节点并执行相同操作,然后执行下一个操作,依此类推。如果没有任何一个,你就有了你的清单。这是一个递归的想法,你会对第二个孩子做同样的事情,等等。

编辑 一些解释

假设您使用的是html标签。打电话给孩子()。取回返回的列表并开始。 第一个元素调用children()。返回列表。第一个元素叫孩子等 当你停止(没有孩子)然后你上升(父亲元素)并继续第二个孩子。当您访问了初始列表的所有节点(来自html元素)时,它结束。 这是一个递归的想法,因此效率受到影响,但它很稳固。

<html>   <--- head , body
    <head>text</head> <---just text node so no elements
    <body>   <--- Second child of html. ul 
        <ul> <--- Empty no elements. go to father element.
        </ul>
    </body>
</html>

答案 1 :(得分:0)

要获取“打开”元素的列表,您只需使用Element.parents()方法即可。如果你想获得以root元素开头的列表,你必须重新排序返回的列表,但这应该是微不足道的。