如何从父级返回第一个文本节点,边缘没有空格?
节点:
<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/