【问题标题】:PHP/XPath: find text node that "starts with" a particular string?PHP/XPath:查找“以”特定字符串“开头”的文本节点?
【发布时间】:2011-06-16 21:16:40
【问题描述】:

我需要知道特定节点中是否存在特定字符串。例如,我需要知道 HTML DOM 的第 3 段中是否存在“quick brown fox”。我正在使用 PHP 的 DOMXPath。有什么建议吗?

【问题讨论】:

    标签: php xml dom xpath


    【解决方案1】:

    尝试以下方法:

    示例来源:

    $html = <<< HTML
    <body>
        <p>the dead brown fox</p>
        <p>the slow brown fox</p>
        <p>the quick brown fox</p>
        <p>the crawling brown fox</p>
    </body>
    HTML;
    

    代码:

    $dom = new DOMDocument;
    $dom->loadXml($html);
    $xp = new DOMXPath($dom);
    echo $xp->evaluate('count(/body/p[3][contains(., "quick")])');
    

    XPath 转换为 countbody 元素下方的第三个 p 元素,contains 文本节点值为“quick”。如果搜索词存在于节点值中的任何位置,这将返回 1 或 0。

    如果您需要知道节点值是否特定短语开头,请改用starts-with function

    PHP 的 DOM 扩展支持 XPath 1.0。

    您也可以通过常规 API 在不使用 XPath 的情况下执行此操作:

    $dom = new DOMDocument;
    $dom->loadXml($html);
    $thirdPara = $dom->getElementsByTagName('p')->item(2);
    echo strpos($thirdPara->nodeValue, 'the quick') === 0 ? 1 : 0;
    

    getElementsByTagName 方法会按标签名称查找所有元素。 item 调用返回这些元素中的第三个(从零开始)。 strpos 函数查找字符串第一次出现的位置。上面 sn-p 的结果将再次为 1(如果节点值不以 'the quick' 开头,则为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多