首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP7: XPath -如何简化这个查询?

PHP7: XPath -如何简化这个查询?
EN

Stack Overflow用户
提问于 2018-06-14 11:42:09
回答 1查看 55关注 0票数 0

从HTML:https://www.topazlabs.com/downloads中,我希望将ReMask版本号提取为string: v5.0.1

  1. 我下载带有curl的HTML
  2. 我使用查询:

就像这样;

代码语言:javascript
复制
 ->finder->query("//div[contains(@class, 'wpb_wrapper')]/.//a[text()[contains(.,'Topaz ReMask')]]/../../../div");

OR

...->finder->query("//div[contains(@class, 'wpb_wrapper')]//a[text()[contains(.,'Topaz ReMask')]]/../../../div");
  1. 然后我查找所有的DIV标记来搜索这两个字符串"/“和"(Win)”的一个,类似于:$versionString = Find($nodes,"/","(Win)");
  2. 我处理文本只提取Windows版本。

它能工作,但能简化吗?

我使用的页面的HTML部分如下:

代码语言:javascript
复制
...
<div class="wpb_wrapper">
  <div class="vc_empty_space" style="height: 20px">
    <span class="vc_empty_space_inner">
    </span>
  </div>
  <div id="mpc_textblock-975b2251c2a82c7" class="mpc-textblock mpc-init mpc-typography--preset_2 ">
    <p>
      <a href="/remask" target="blank">Topaz ReMask</a>
    </p>
  </div>
  <div class="mpc-tooltip-wrap" data-id="mpc_textblock-615b2251c2a8c4a">
    <div id="mpc_textblock-615b2251c2a8c4a" class="mpc-textblock mpc-init mpc-typography--preset_0 ">
      <p>
        <em>v5.0.3 (Mac) / v5.0.1 (Win)
        </em>
      </p>
    </div>
    <div id="mpc_tooltip-925b2251c2a8d2f" class="mpc-tooltip mpc-init mpc-typography--preset_4 mpc-position--left mpc-can-hover mpc-trigger--hover ">Mac Updated November 4, 2016
      <br>Windows Updated November 21, 2016
      <div class="mpc-arrow">
      </div>
    </div>
  </div>
  <div id="mpc_textblock-475b2251c2a9601" class="mpc-textblock mpc-init ">
    <p>The quickest and easiest way to mask your photo.
    </p>
  </div>
</div>
...
EN

回答 1

Stack Overflow用户

发布于 2018-08-02 08:55:55

你可以把它建立在文本内容的基础上。使用DOMXpath::evaluate(),您可以直接获取字符串:

代码语言:javascript
复制
$document= new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);

$expression = "substring-after(
  //div[contains(.//p, 'Topaz ReMask')]//text()[starts-with(., 'Windows Updated ')],
  'Windows Updated '
)";

var_dump($xpath->evaluate($expression));

输出:

代码语言:javascript
复制
string(24) "November 21, 2016
      "

Xpath表达式

  • 如果有一个带有文本divp,. //div[contains(.//p, 'Topaz ReMask')]
  • ...the从Windows Updated开始的文本后代节点. //div[contains(.//p, 'Topaz ReMask')]//text()[starts-with(., 'Windows Updated ')]
  • ..。并在Windows Updated之后提取文本
代码语言:javascript
复制
    substring-after(
      //div[contains(.//p, 'Topaz ReMask')]//text()[starts-with(., 'Windows Updated ')],
      'Windows Updated '
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50856755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档