3

我有一个 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
4

2 回答 2

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(), ' ,')")

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

于 2012-04-15T23:41:43.113 回答
2

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

于 2012-04-15T20:41:45.290 回答