如何将Xpath转换为CSS

Kam*_*mil 5 css xpath css-selectors html-parsing jsoup

我的xpath是: /html/body/div/table/tbody/tr[2]/td[4]

我需要一个CSS在jsoup选择器中使用它.

我在xpath和css之间找到了一个比较:在这里,并且在他们的例子(Second <E> element anywhere on page)中说我不能这样做.Xpath xpath=(//E)[2]CSS N\A.

也许我找不到我想要的东西.有任何想法吗?

这是我要解析的html(我需要获取值:13):

<div class=tablecont>
    <table width=100%>
        <tr>
            <td class=header align=center>Panel Color</td>
            <td class=header align=center>Locked</td>
            <td class=header align=center>Unqualified</td>
            <td class=header align=center>Qualified</td>
            <td class=header align=center>Finished</td>
            <td class=header align=center>TOTAL</td>
        </tr>
        <tr>
            <td align=center>
                <div class=packagecode>ONE</div>
                <div>
                <div class=packagecolor style=background-color:#FC0;></div>
                </div>
            </td>
            <td align=center>0</td>
            <td align=center>0</td>
            <td align=center>1</td>
            <td align=center>12</td>
            <td align=center class=rowhead>53</td>
        </tr>
        <tr>
            <td align=center>
                <div class=packagecode>two</div>
                <div>
                    <div class=packagecolor style=background-color:#C3F;></div>
                </div>
            </td>
            <td align=center>0</td>
            <td align=center>0</td>
            <td align=center>3</td>
            <td align=center>42</td>
            <td align=center class=rowhead>26</td>
        </tr>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

nwe*_*hof 11

虽然表达式(//E)[2]不能用CSS选择器表示,但是类似的表达式E[2]可以使用:nth-of-type()伪类进行模拟:

html > body > div > table > tbody > tr:nth-of-type(2) > td:nth-of-type(4)
Run Code Online (Sandbox Code Playgroud)


Ole*_*yga 8

对我有用.

//Author: Oleksandr Knyga
function xPathToCss(xpath) {
    return xpath
        .replace(/\[(\d+?)\]/g, function(s,m1){ return '['+(m1-1)+']'; })
        .replace(/\/{2}/g, '')
        .replace(/\/+/g, ' > ')
        .replace(/@/g, '')
        .replace(/\[(\d+)\]/g, ':eq($1)')
        .replace(/^\s+/, '');
}
Run Code Online (Sandbox Code Playgroud)