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
Php xPath-能否从节点中删除逗号?_Php_Xpath - Fatal编程技术网

Php xPath-能否从节点中删除逗号?

Php xPath-能否从节点中删除逗号?,php,xpath,Php,Xpath,我有一个xPath查询,它从这样的div中获取明文 xpath->query("//div[@id='main']//span[@class='meta']/text()") 此查询返回我想要的文本, 我是否可以删除查询中的逗号 谢谢 编辑: xpath->query("translate(//div[@id='main']//span[@class='meta']/text(), ',', '')") xpath->query("normalize-space(trans

我有一个xPath查询,它从这样的div中获取明文

xpath->query("//div[@id='main']//span[@class='meta']/text()")
此查询返回我想要的文本,

我是否可以删除查询中的逗号

谢谢

编辑:

xpath->query("translate(//div[@id='main']//span[@class='meta']/text(), ',', '')")
xpath->query("normalize-space(translate(//div[@id='main']//span[@class='meta']/text(), ',', ''))")
使用下面Mad的代码,我的查询现在看起来是这样的(我将示例中的
替换为单词
hello
,以减少混淆。)

我试图像这样回显查询结果:

foreach ($search_term as $st) { 
echo $st->nodeValue; }
我收到的错误是

Invalid argument supplied for foreach() in ... on line 50
如果要删除尾随逗号,看起来是更好的选择。我不明白为什么将XPath与此相关会更可取,但您也可以使用函数(XPath 2.0)来实现这一点。

您可以使用空字符串替换
字符:

xpath->query("translate(//div[@id='main']//span[@class='meta']/text(), ',', '')")
xpath->query("normalize-space(translate(//div[@id='main']//span[@class='meta']/text(), ',', ''))")
但是,如果在
text()
节点中逗号前面或后面有空格,则可能会导致后面有空格

然后可以使用删除前导/尾随空格:

xpath->query("translate(//div[@id='main']//span[@class='meta']/text(), ',', '')")
xpath->query("normalize-space(translate(//div[@id='main']//span[@class='meta']/text(), ',', ''))")

尽管如此,它也将文本中间的空白序列归一化为单个空间。

您还可以使用选择
前面的文本

xpath->query("substring-before(//div[@id='main']//span[@class='meta']/text(), ' ,')")

但是,如果字符串不包含
,则
substring-before()
将不会返回任何内容。

这是Xpath 1还是Xpath 2?在XPath 2中有一个执行regex replace的
replace()
函数。你可以尝试一下,如果你收到一条红色的错误消息,你就会得到XPath 1:)Jon,我想如果可能的话,在一个xp查询中处理这一切会更干净。谢谢你的链接。我不确定如何找到我正在使用的xPath版本,所以我可能只使用rtrim。编辑-rtrim成功了。太棒了,我来试试。在这种情况下,尾随空间应该不是问题,但是知道如何删除它很好。谢谢Mads!Mads,我正在使用你的代码,我相信它正在工作,因为查询本身没有抛出任何错误。然而,当我尝试回显我的查询结果(现在应用了translate()时),我得到了这个错误——“为foreach()提供的参数无效”。我已经更新了我的原始帖子,以显示我是如何回显查询的。
translate()
normalize-space()
函数需要一个字符串作为输入。在XPath 1.0中,如果向它提供一系列节点,它将选择第一个节点,然后返回一个字符串。代码需要从XPath中选择的节点序列。在XPath2.0中,您可以执行如下操作
//div[@id='main']//span[@class='meta']]/text()/normalize-space()
。根据您目前的情况,选择节点集并修改for each中的值(而不是100%的XPath)可能是最容易的,除非您可以使用XPath 2.0。我非常确定我使用的是XPath 1,所以我将继续使用Jon在上面发布的rtrim方法。标记您的答案,因为这是一个XPath解决方案。再次感谢