Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跳过元素/加入匹配的XPath问题_Xpath - Fatal编程技术网

跳过元素/加入匹配的XPath问题

跳过元素/加入匹配的XPath问题,xpath,Xpath,以下是数据: <p> <span class="z">XXX</span><br/> 123456<br/> 78910</p> XXX 123456 78910 到处都是空白和换行符。 我只需要获得跳过span元素的“12345678910”。 当我运行xpath:'//p/text()'时,我得到了3个匹配项:第一个匹配项是一组空格和换行符,第二个匹配项是123456,第三个匹配项是78910。 是否有其他方法跳过

以下是数据:

<p>
<span class="z">XXX</span><br/>
123456<br/>
78910</p>

XXX
123456
78910

到处都是空白和换行符。 我只需要获得跳过span元素的“

123456
78910
”。 当我运行xpath:'//p/text()'时,我得到了3个匹配项:第一个匹配项是一组空格和换行符,第二个匹配项是123456,第三个匹配项是78910。

是否有其他方法跳过跨度元素?是否可以以某种方式加入匹配项?

看起来您正在尝试选择
span
元素之后的每个节点:

/p/span/following-sibling::node()
如果希望文本节点子节点不包含空格,则只包含文本节点:

/p/text()[normalize-space()]
使用

/p/node()[not(self::span) and (not(self::text[not(normalize-space())]))]

这将选择顶部元素
p
的子元素返回的所有节点,如果它们是文本节点,则它们不仅仅是空白。

/p/span/以下同级::node()[normalize-space()]和/p/text()[normalize-space()]返回了2个匹配项,现在没有匹配项与空格匹配,但我需要加入这两个匹配项好的问题,+1。有关选择所需节点的XPath表达式,请参见我的答案。:)你说的“加入匹配”是什么意思?它给了我5个匹配-3个只有空格,2个有文本,但我需要在1个匹配中加入它们。这可能吗?@Desecho:XPath表达式选择节点——它不能从多个节点中选择一个节点,因为XPath是一种查询语言,不会修改XML文档。