【问题标题】:XPath: Extract text between elements based on two XPath pathsXPath:基于两个 XPath 路径提取元素之间的文本
【发布时间】:2019-11-06 02:17:28
【问题描述】:

HTML 如下所示

    <div>
        <div>
            <span>
                <p>sample-text here p1 </p>
                <p>sample-text here p2</p>
                <p>sample-text here p3</p>
            </span>
        </div>
        <div>
            <p>
                <span>
                    <p>sample-text here p4</p>
                </span>
            </p>
        </div>
        <div>
            <p>
                <div>
                    <span>
                        <p>sample-text here p5</p>
                        <p>sample-text here p6</p>
                        <p>sample-text here p7</p>
                        <p>sample-text here p8</p>
                        <p>sample-text here p9</p>
                    </span>
                </div>
            </p>
        </div>
    </div>

我有两个 XPath 路径如下

/div[1]/div[1]/span[1]/p[3]/text()

/div[1]/div[3]/p[1]/div[1]/span[1]/p[3]/text()

第一个得到'sample-text here p3',第二个得到'sample-text here p7'

现在,我的目标是实际获取这两个路径之间的所有元素的文本(包括这两个元素)

/div[1]/div[1]/span[1]/p[3] AND /div[1]/div[3]/p[1]/div[1]/span[1]/p[3]

预期的结果是 此处为示例文本 p3此处为示例文本 p4此处为示例文本 p5此处为示例文本 p6此处为示例文本 p7

我查看了 XPath 轴和运算符,但不太确定如何将它们用于此上下文。任何帮助表示赞赏。谢谢

编辑: 我编辑了这个问题,包括示例 HTML,以涵盖所有 div 中更多不同的结构。目的是能够使用这些 XPath,而不是依赖于文档的结构,谢谢

【问题讨论】:

    标签: xpath


    【解决方案1】:

    这里不需要axes,只需使用position()

    (*//span/p)[position() >= 3 and position() <= 7]
    

    使用完整的xpath,基于您的示例xml

    (/div/div/span/p)[position() >= 3 and position() <= 7]
    

    【讨论】:

    • 我得到了你的答案,但是,如果这个 HTML 在结构真的未知的情况下更复杂,但我所拥有的只是这两个 XPath 路径?有没有更通用的方法来处理这种情况?感谢您的回复。
    • 指定完整的 xpath,以确保。
    • 我将编辑问题以使其更具体
    • @METAL,我编辑了这个问题以涵盖一般用例,抱歉问题不够清晰。
    • @Vsoma,我认为这是唯一的方法(*//span/p)[position() &gt;= 3 and position() &lt;= 7]
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多