【问题标题】:Xpath find a unique selectorXpath 找到一个唯一的选择器
【发布时间】:2011-03-29 00:04:59
【问题描述】:

我希望解析一个预定义字符串的 html 页面,然后构建对该位置的唯一引用。在“Wikken”的帮助下,我已经走到了这一步……但它工作不正常。

$d = new DOMDocument();
$d->loadXML($xml);
$x = new DOMXPath($d);
$result = $x->evaluate("//text()[contains(.,'STRING')]/ancestor::*/@id");
$unique = null;
for($i = $result->length -1;$i >= 0 && $item = $result->item($i);$i--){
    if($x->query("//*[@id='".addslashes($item->value)."']")->length == 1){
        echo 'Unique ID is '.$item->value."\n";
            $unique = $item->value;
        break;
    }
}
if(is_null($unique)) echo 'no unique ID found';

__编辑_

让我再解释一下这个问题。我正在寻找一个可以解析页面并找到唯一字符串的 html 解析器。然后,我需要为该位置找到一个唯一的占位符,以便当网站上的数据发生变化时,我可以找到新数据。 Wrikken 帮助我定位字符串...不幸的是,上面的代码没有正确找到唯一的 css 选择器。

【问题讨论】:

  • 你需要认真地重新表述这个问题。就目前而言,什么都无法理解。请提供一个完整的(简单的)XML 文档。解释你想生产什么。提供您希望从您提供的确切 XML 文档中生成的确切结果。我很想对这个问题投反对票,但让我给你一个机会。
  • 我也不清楚。但是这个//text()[contains(.,'STRING')]/ancestor::*/@id 可能会选择多个属性...
  • 刚刚编辑...希望更清楚:)

标签: php html xml xpath


【解决方案1】:

不确定这是否是您的问题,但我通常会像这样做第一部分:

//*[contains(text(),'STRING')]/ancestor::*/@id

【讨论】:

  • 不,那部分工作正常(尽管易读性可能对你有利),循环也可以(至少,在这里的测试中......),但我认为可以在 1 Xpath 中确定找到的@id 属性是否真的是唯一的恕我直言,这就是为什么我敦促另一个问题:)
猜你喜欢
  • 2021-12-03
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多