美文网首页我爱编程程序员
Xpath-Jquery-Regx-GetSubNode

Xpath-Jquery-Regx-GetSubNode

作者: zhyuzh3d | 来源:发表于2018-07-03 14:13 被阅读3次

    问题解决

    如何从文本和标记同级混排的html代码中提取数据?
    比如下面这种情况:

    <p>苏州 <em class="vline"/>5-10年<em class="vline"/>本科</p>
    

    如何用xpath一次取到【本科】?
    正确的方法是使用/node()[3]方法,比如

    //*[@class='info-primary']//p//node()[3]
    

    然后nodes.toString()就能得到【本科】数据。

    常见的其他xpath语法:
    //双杠表示层级跳跃获取,比如/div//span表示这个span在div下面,但不一定是紧挨的父子关系,也可能是爷孙关系。
    //[@attr='a']表示属性attr为a的任意元素,这里attr可以是id,class或其他。
    //
    [contains(class,'cc')]表示class包含cc的元素
    //div[2]表示第二个

    Jquery和xpath的不同

    对于下面这个结构

        <div>
            <li>
                <ul>
                    <p>王小明</p>
                    <div><span>年龄</span><span>12</span></div>
                </ul>
                <ul>
                    <p>刘晓明</p>
                    <div><span>年龄</span><span>13</span></div>
                </ul>
                <ul>
                    <p>吴文英</p>
                    <div><span>年龄</span><span>14</span></div>
                </ul>
            </li>
        </div>
    

    如果想要取得三个名字中的任意一个是很容易的$('div li ul p:eq(2)')或者/div/li/ul/p[2]都可以。
    但是如果要取到三个年龄数字就不一样了。
    $('div li ul div span:eq(1)取到的是12,这是因为jquery把六个span(三个年龄,三个数字)放在一起考虑,然后得到第二个。
    而xpath则不同,/div/li/ul/div/span[2]得到的是3个数字元素组成的数组,而不是一个数字。

    正则表达式

    提取字符串部分数据,js中提供string.match(regx)方法。但是总会把正则里面的内容也包含在提取结果中,比如'abcd'.match(/.bc./)得到abcd而不是bc.

    如何让表达式中的字符参与匹配但不被提取?

    可以参照正则表达式的前瞻和后顾方法改进,后顾就是考虑后面有什么,但不会把后顾内容取出。但前瞻仍然会包含取出来...

    比如/>.{1,5}(?=</p>)取出来的总是会包含前面的/>而不包含后面的</p>,结果类似/>苏州这个样子。暂时不知道有没有更好的办法。


    致力于让一切变得简单

    如果您发现文章错误,请不吝留言指正;
    如果您觉得有用,请点喜欢;
    如果您觉得很有用,欢迎转载~


    END

    相关文章

      网友评论

        本文标题:Xpath-Jquery-Regx-GetSubNode

        本文链接:https://www.haomeiwen.com/subject/cgwduftx.html