Php 通过XPath直接输入文本内容?

Php 通过XPath直接输入文本内容?,php,html,xml,xpath,Php,Html,Xml,Xpath,…除了在中选择脚本和样式标记,以及遇到或其他标记时停止文本选择之外,几乎可以正常工作 我想查找直接包含文本的元素,并且文本大于140个字符,并且应该选择整个元素的文本(有时文本在span的更深处)。您需要理解 text()在XPath中选择。中显示的br元素 您的选择表单在父元素中混合了内容:text() 节点和元素混合在一起 string()是一个XPath函数,返回XPath表达式的。要获取忽略br元素的字符串,请选择 父div并通过string()直接获取其字符串值 或者通过在 隐含到

…除了在中选择
脚本
样式
标记,以及遇到

或其他标记时停止文本选择之外,几乎可以正常工作

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

您需要理解

  • text()
    在XPath中选择。中显示的
    br
    元素 您的选择表单在父元素中混合了内容:
    text()
    节点和元素混合在一起
  • string()
    是一个XPath函数,返回XPath表达式的。要获取忽略
    br
    元素的字符串,请选择 父
    div
    并通过
    string()直接获取其字符串值
    或者通过在
    隐含到字符串转换的上下文
在这样的背景下,你的声明

我想找到直接包含文本的元素,文本是 大于140个字符,整个元素的文本应为 选中(有时文本在范围内更远)

可以重新表述为

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

让我们看一些示例XML

//*/text()[string-length() > 100]
捕获重新表述的需求并选择四个元素:

//*[text()][string-length() > 7]
然后,将只选择
a
c
d

如果只需要文本,则在XPath 1.0中,可以集体获取字符串值:

//*[text()[normalize-space()]][string-length() > 7]
如果需要字符串集合,在XPath 1.0中,需要通过调用XPath的语言对元素进行迭代,但在XPath 2.0中,可以在末尾添加
string()
步骤:

string(//*[text()[normalize-space()]][string-length() > 7])
要获取由三个单独字符串组成的序列,请执行以下操作:

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

当遇到
或其他标记时,它会停止文本选择-标记是否也应该被捕获到文本中?是的,或者那些没有标记的标记内容。
string(//*[text()[normalize-space()]][string-length() > 7])
//*[text()[normalize-space()]][string-length() > 7]/string()
This is a test of mixed content.
asdf asdf asdf asdf
asdf asdf