php - 如何获得边缘没有空格的文本节点?

标签 php xml xpath domdocument

如何从父级返回第一个文本节点,边缘没有空格?

节点:

<p>Hello <b>World</b> by.</p>

您必须获得边缘没有空格的第一个单词:

→你好←

这样的Xpath查询:

p/[normalize-space(text()[1])]

返回错误:

DOMXPath::query():表达式无效

最佳答案

DOMXpath:query() 不允许使用带有标量结果的 Xpath 表达式。您必须使用 DOMXpath::evaluate()

$xml = <<<'XML'
<p>Hello <b>World</b> by.</p>
XML;

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

var_dump(
    $xpath->evaluate('normalize-space(p/text()[1])', $document)
);

输出:

string(5) "Hello"

字符串函数必须位于外部。这样您首先选择节点,然后将结果转换为字符串。 p 选择上下文节点的 p 子节点。 //p 选择文档中的任何 p 元素节点。所以 p/text()[1] 都是 p 子节点内的第一个(位置)文本子节点。

normalize-space() 会将第一个节点(从获取的列表中)转换为字符串,去除尾随/前导空格,并将内部所有空格组替换为单个空格。

关于php - 如何获得边缘没有空格的文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57173532/

相关文章:

php - 在 web 目录外访问 PHP Browscap FastCGI

php - Memcached 一致性哈希不适用于 4 台服务器中的 3 台宕机

xml - 是否有一个 cordova 插件可以从 config.xml 中读取值?

java - 为什么要编译 XPath 表达式?

c# - 使用 XPathNodeIterator 迭代 XmlDocument 时修改它

php - mySQL中根据某个select进行计数

php - 比特币当前的 PHP 值(value)?

java - 在 Unity 中使用自定义 list 文件和权限?

javascript - 您可以使用 JQuery 通过 XSLT 将 XML 转换为 XML

html - XPath在注释之间多次选择