【问题标题】:Why is XPath count() not working for me in PHP?为什么 XPath count() 在 PHP 中对我不起作用?
【发布时间】:2020-01-06 14:53:03
【问题描述】:

我正在尝试使用 XPath 从文档中获取所有部分标题元素的数量(H1,H2,H3,H4,H5,H6),例如:

    $headerCount=$xpath->query("count(//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6])"); 

我用这个例子在http://www.xpathtester.com/xpath 上测试了上面的查询,结果是'6':

<h2>Header 1</h2>
<h2>Header 2</h2>
<h3>Header 2.1</h3>
<h4>Header 2.1.1</h4>
<h2>Header 3</h2>
<h3>Header 3.1</h3>

但是当我尝试像这样使用 $headerCount 时:

echo "count: ".$headerCount->textContent;

我得到这个错误:

Undefined property: DOMNodeList::$textContent

DOMNodeList 暗示有一个节点列表,但我认为它只是一个数值,例如所有标题的数量为6。

谁能解释我如何才能获得文档中所有标题的数量?

【问题讨论】:

  • 请注意,根据PHP manualDOMXPath::query 只返回DOMNodeList。

标签: php html xml xpath count


【解决方案1】:

您的 XPath 没问题;需要调整的是您的 PHP(如 Alejandro pointed out in a helpful comment)。

使用DOMXPath::evaluate 代替DOMXPath::query

$headerCount=$xpath->evaluate("count(//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6])"); 

那么$headerCount只是一个数值,例如所有标题的数量为6,正如预期的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2017-12-12
    • 2013-06-01
    • 1970-01-01
    • 2012-10-26
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多