我有一个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
答案 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)来实现。