我想提取以下HTML中的文本.然而,在一个封闭的HTML标记中发生的所有事情以及它之后发生的所有事情都应该被忽略.

HTML以不同的形式出现.

<span class="classA">Text 1 <span class="classB">Text 2</span> Text 3 <span class="classC">Text 4</span> Text 5</span>

预期结果:"文本1文本2文本3"

其他变体:

<span class="classA">Text 1 <span class="classC">Text 2</span></span>
<span class="classA">Text 1 <span class="classC">Text 2</span> Text 3</span>
<span class="classA">Text 1</span>

预期结果:"文本1"

<span class="classA">Text 1 <span class="classB">Text 2</span> Text 3</span>

预期结果:"文本1文本2文本3"

因此,出现一个span元素之后的所有内容都应该被忽略.也有可能"classC"根本不出现.

我已经try 过//span[@class="classA"]//text()[parent::*[not(@class="classC")]],它忽略了"classC"内容,但返回<span class="classC">之后的文本(第一个示例中的文本5).

我如何才能做到这一点?

Update:

有了//span[@class="classC"]//parent::*/preceding::text(),我就更接近这个问题了.然而,它仍然不适用于<span class="classA">Text 1</span>,返回注释.

推荐答案

试试这一点:

//text()[not(preceding::span[@class="classC"]|ancestor::span[@class="classC"])]

但正如Michael Kay所说,这可能是非常低效的,这取决于你的源html.

Html相关问答推荐

如何将grid—template—column应用于元素中的子元素

我似乎不能正确地将我的导航栏居中'

悬停时跳转的内容

为什么这个高度为100%的页面会出现滚动条?

悬停效果在新西兰表上不起作用

在窄屏幕上显示表格,每个单元格占一行

轨道上的居中范围滑块拇指(Webkit)

如何使用CSS创建文件夹选项卡的形状?

在css中是否可以在遮罩图像中结合线性渐变和径向渐变?

如何 Select 表格';TMS Web Core中的body html元素?

标题在实时网站上闪烁

如何使用 Flutter 构建 Chrome 扩展?

如何居中此按钮,即使它已经在计算机分辨率中居中

悬停时宽度从 0 过渡到自动

不完整的悬停

将图像高度调整到容器 div 中而不使其高度增加

如何动态调整彼此重叠的两个 div 的大小,使它们在增长时保持相同的高度

删除按钮组件时 bootstrap col-auto 布局高度对齐中断

SVG 适用于 Safari,不适用于 Chrome

更改包含图标高度的 div