首页 > 解决方案 > 使用 XPath 捕获部分文本

问题描述

我在为以下 H 找到 XPath 时遇到了一些困难

<div>
    <p> pppppppp 
        <span class="rollover-people">
            <a class="rollover-people-link">pppppp</a>
            <span class="rollover-people-block">
                <span class="rollover-block">
                    <span>
                        <img src="/someAddress" width="100" height="100" alt>
                        <a>xxxx</a>
                        <a>xxxxx</a>
                    </span>
                </span>
            </span>
        </span>pppppppp
    </p>ppppppppp
<div>

所以基本上我需要里面的所有<p>东西<span class="rollover-people-block">。换句话说,我想要<p>但不是<span class="rollover-people-block">。这甚至可能吗?请记住,<p>在页面中重复多次。

标签: xpathxpath-1.0

解决方案


这就是你正在寻找的东西。

//p//text()[not(ancestor::span[@class='rollover-people-block'])]

这将获得 p 下的所有文本节点,不包括 span class='rollover-people-block' 下的文本节点。

示例 html:

<!DOCTYPE html>
<html>
	<body>
	<div>
    <p> A 
        <span class="rollover-people">
            <a class="rollover-people-link">B</a>
            <span class="rollover-people-block">
                <span class="rollover-block">
                    <span>
                        <img src="/someAddress" width="100" height="100" alt>
                        <a>c</a>
                        <a>d</a>
                    </span>
                </span>
            </span>
        </span>E
    </p>f
	<p> G
        <span class="rollover-people">
            <a class="rollover-people-link">H</a>
            <span class="rollover-people-block">
                <span class="rollover-block">
                    <span>
                        <img src="/someAddress" width="100" height="100" alt>
                        <a>i</a>
                        <a>j</a>
                    </span>
                </span>
            </span>
        </span>K
    </p>l
<div>
	</body>
</html>

xpath 输出:

在此处输入图像描述


推荐阅读