如何获得边缘没有空格的文本节点?
How to get a text node without spaces at the edges?
如何从我的父节点返回第一个没有边缘空格的文本节点?
节点:
<p>Hello <b>World</b> by.</p>
你必须得到边缘没有空格的第一个单词:
→你好←
这样的 Xpath 查询:
p/[normalize-space(text()[1])]
Return一个错误:
DOMXPath::query():无效表达式
试试这个 XPath:
/p/text()[1]
如果您的 XPath 引擎支持这种表达式,可能还有这个:
normalize-space(/p/text()[1])
How do I get the first text node back from my parent without spaces at the edges?
你不能。 XPath 既可以 select 原样来自源文档的节点,也可以构建字符串、数字或布尔值等值。 (或者在 XPath 2.0 中,数据类型范围更广。)
因此您可以 select 文本节点,原样(即包含空格)使用
/p/text()[1]
或者您可以return通过修剪文本节点构造的字符串:
normalize-space(/p/text()[1])
但是对于某些 XPath API,您只能使用第一种表达式(returns 节点),或者如果您想使用第二种表达式(returns字符串),你必须以不同的方式调用它。
请注意,这两个表达式都非常脆弱:如果源文档与您的示例输入差异很小,它们将产生无用的结果。
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"
字符串函数必须在外面。所以你首先 select 节点,然后将结果转换为字符串。 p
selects p
个上下文节点的子节点。 //p
selects 文档中的任何 p
元素节点。所以 p/text()[1]
都是 p
children.
内的第一个(位置)文本子节点
normalize-space()
会将第一个节点(从获取的列表中)转换为字符串,去除 trailing/leading 空格并将内部的所有空格组替换为单个空格。
如何从我的父节点返回第一个没有边缘空格的文本节点?
节点:
<p>Hello <b>World</b> by.</p>
你必须得到边缘没有空格的第一个单词:
→你好←
这样的 Xpath 查询:
p/[normalize-space(text()[1])]
Return一个错误:
DOMXPath::query():无效表达式
试试这个 XPath:
/p/text()[1]
如果您的 XPath 引擎支持这种表达式,可能还有这个:
normalize-space(/p/text()[1])
How do I get the first text node back from my parent without spaces at the edges?
你不能。 XPath 既可以 select 原样来自源文档的节点,也可以构建字符串、数字或布尔值等值。 (或者在 XPath 2.0 中,数据类型范围更广。)
因此您可以 select 文本节点,原样(即包含空格)使用
/p/text()[1]
或者您可以return通过修剪文本节点构造的字符串:
normalize-space(/p/text()[1])
但是对于某些 XPath API,您只能使用第一种表达式(returns 节点),或者如果您想使用第二种表达式(returns字符串),你必须以不同的方式调用它。
请注意,这两个表达式都非常脆弱:如果源文档与您的示例输入差异很小,它们将产生无用的结果。
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"
字符串函数必须在外面。所以你首先 select 节点,然后将结果转换为字符串。 p
selects p
个上下文节点的子节点。 //p
selects 文档中的任何 p
元素节点。所以 p/text()[1]
都是 p
children.
normalize-space()
会将第一个节点(从获取的列表中)转换为字符串,去除 trailing/leading 空格并将内部的所有空格组替换为单个空格。