gpt4 book ai didi

php - 通过XPath直接显示文本内容?

转载 作者:行者123 更新时间:2023-12-03 17:10:45 25 4
gpt4 key购买 nike

//*/text()[string-length() > 100]


...几乎可以工作,除了它还会在 html document中选择 scriptstyle标记,并且遇到 <br>或其他标记时会停止文本选择。

enter image description here

我想查找直接包含文本的元素,并且该文本大于140个字符,并且应该选择整个元素的文本(有时文本在 span内)。

最佳答案

您需要了解difference between text() nodes and string values in XPath


text()在XPath中选择text nodes。显示在br元素中
您的选择表单在父元素中混合了内容:text()
节点和元素混合在一起。
string()是一个XPath函数,它返回XPath表达式的string value。要获取忽略br元素的字符串,请选择
div并通过string()直接获取其字符串值
或通过在表达式中使用表达式来隐式获取其字符串值
暗示要转换为字符串的上下文。


在这种背景下,您的陈述,


我想查找直接包含文本的元素,并且文本是
大于140个字符,整个元素的文字应为
选中(有时文本在跨度之内)。


可以改写为

我想找到具有text()节点子代且其字符串值的长度大于140的元素。

让我们看一些示例XML,

<r>
<a>This is a <b>test</b> of mixed content.</a>
<c>asdf asdf asdf asdf</c>
<d>asdf asdf</d>
</r>


然后将140减少到8以使其更易于管理,然后

//*[text()][string-length() > 7]


捕获改写的需求并选择四个元素:

<r>
<a>This is a <b>test</b> of mixed content.</a>
<c>asdf asdf asdf asdf</c>
<d>asdf asdf</d>
</r>

<a>This is a <b>test</b> of mixed content.</a>

<c>asdf asdf asdf asdf</c>

<d>asdf asdf</d>


请注意,它没有选择 b,因为其字符串值的长度小于7个字符。

还要注意,由于元素之间只有空格的 r,因此选择了 text()。要消除这些元素,请在 text()中添加一个附加谓词:

//*[text()[normalize-space()]][string-length() > 7]


然后,将仅选择 acd

如果只需要文本,则可以在XPath 1.0中共同使用字符串值:

string(//*[text()[normalize-space()]][string-length() > 7])


如果要收集字符串,则在XPath 1.0中,需要通过调用XPath的语言来遍历元素,但是在XPath 2.0中,可以在末尾添加 string()步骤:

//*[text()[normalize-space()]][string-length() > 7]/string()


得到三个单独的字符串的序列:

This is a test of mixed content.
asdf asdf asdf asdf
asdf asdf

关于php - 通过XPath直接显示文本内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41075312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com