Php xPath-能否从节点中删除逗号?
我有一个xPath查询,它从这样的div中获取明文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->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解决方案。再次感谢