xPath - 你能从节点中删除逗号吗?

时间:2012-04-15 20:39:26

标签: php xpath

我有一个xPath查询,可以从像这样的div中抓取明文

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

此查询返回The text that I want,

无论如何我可以在查询中删除该逗号吗?

由于

修改

使用下面的Mad代码,我的查询现在看起来像这样(我已使用单词,替换了示例中的hello,以使其更容易混淆。)

$search_term = $xpath->query("translate('//div[@id='main']//span[@class='meta']/text()', 'hello', '')");

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

foreach ($search_term as $st) { 
echo $st->nodeValue; }

我收到的错误是

Invalid argument supplied for foreach() in ... on line 50

2 个答案:

答案 0 :(得分:3)

您可以使用translate(),字符替换为空字符串:

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

但是,如果逗号前面或后跟text()节点中的空格,则可能会导致尾随空格。

然后您可以使用normalize-space()删除前导/尾随空格:

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

虽然,它也会将文本中间的空格序列规范化为单个空格。

您还可以使用substring-before()选择,之前的文字:

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

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

答案 1 :(得分:2)

如果要删除尾随逗号,看起来rtrim是更好的选择。我不明白为什么将XPath与此相关会更好,但您也可以使用fn:replace函数(XPath 2.0)来实现。