如何将 Xpath 转换为 CSS

Posted

技术标签:

【中文标题】如何将 Xpath 转换为 CSS【英文标题】:How to convert Xpath to CSS 【发布时间】:2013-03-21 19:30:01 【问题描述】:

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

我需要一个 CSS 才能在 jsoup 选择器中使用它。

我找到了 xpath 和 css 之间的比较:here,在他们的示例 (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>

【问题讨论】:

但是您是在页面上的任何位置寻找第二个元素,还是在其父元素的第二个子元素?如果是前者,用CSS是做不到的。 【参考方案1】:

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

html > body > div > table > tbody > tr:nth-of-type(2) > td:nth-of-type(4)

【讨论】:

【参考方案2】:

您是否正在寻找这样的东西:

http://jsfiddle.net/YZu8D/

.tablecont tr:nth-child(2) td:nth-child(4) background-color: yellow; 
.tablecont tr:nth-child(3) td:nth-child(4) background-color: yellow; 

【讨论】:

【参考方案3】:

对我有好处。

//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+/, '');

【讨论】:

这会将 css 的起始 / 转换为起始 &gt;,这是错误的。 对我来说没问题!谢谢【参考方案4】:

应该学习如何编写 CSS 选择器,但为了快速解决问题,请尝试:cssify

例如,我输入你的 xpath 并吐出:html &gt; body &gt; div &gt; table &gt; tbody &gt; tr:nth-of-type(2) &gt; td:nth-of-type(4)

试试看。

【讨论】:

类似的东西? @SurajRao

以上是关于如何将 Xpath 转换为 CSS的主要内容,如果未能解决你的问题,请参考以下文章

如何将xpath位置转换为像素

如何将此 XPath 表达式转换为 BeautifulSoup?

如何使用 pandas 将多个 Xpath 转换为数据框?

如何将具有Object值的Map转换为适当的类型?

将 XPath 转换为美丽的汤

如何将全局 css 转换为 css 模块?