【问题标题】:XPATH - how to use multiple pathsXPATH - 如何使用多个路径
【发布时间】:2012-03-14 06:29:59
【问题描述】:

我正在使用 xpath 来检索给定元素中某些链接 (a) 的文本值。然后我将结果推送到一个名为 $tableau 的数组中。一切正常 :) 问题是,我现在还想检索这些链接的 href。所以在我的数组中有文本值和href。另一件事是,我不知道该怎么做。希望有人可以提供帮助。预先感谢您的回复。干杯。马克

$url = 'http://www.somesite.com';
$path = '.../a';
$tableau = array();

$dom = new DOMDocument();
@$dom->loadHTML($url);
$xpath = new DomXPath($dom);
$x = $xpath->query($path);

foreach ($x as $value)
     array_push($tableau, $value->nodeValue);

【问题讨论】:

    标签: arrays xpath


    【解决方案1】:

    试试这个:

    foreach ($x as $value)
    {
        array_push($tableau, $value->nodeValue, $value->getAttribute('href'));
    }
    

    【讨论】:

    • 你好javram。感谢您尝试提供帮助。我知道如何检索href ...我的问题是我不知道如何将文本值(a)和href(@href)推送到我的数组(同时)
    • 一个数组将在数组的每个索引处存储单个字符串。如果要在数组的每个索引处存储多个值,则需要一个支持复杂类型的数组。或者,您可以将 nodeValue 和 href 与分隔符连接在一起,然后将其存储在数组的单个位置。
    • 根据 vireshas 的提示,我发现多维数组可能是一个解决方案。正如我所说,我需要一些时间来测试...再次感谢您花时间尝试帮助我。
    • Javram,为了测试您的建议,我需要对我的代码进行更改,这需要一些时间。不过 getAttribute('href') 是一个很好的提示。谢谢...
    【解决方案2】:

    你可以使用关联数组

     the code might look like this(not sure abt the syntax though)
     arr = [ "1" => [ "text" => "value1" , "href" => "value1"],
             "2" => [ "text" => "value2", "href" => "value2"]];
    

    检索所有锚标记的href的xpath xpression是这样的

      ("//a/@href");
    
      //     --> select a from all the descendants of the root
      a      --> select the anchor tag
      @href  --> select the href of this anchor (@ to select attributes) 
    

    将此表达式转换为等效的 PHP 代码

    【讨论】:

    • 你好vireshas。我知道如何检索href...问题是我想将文本值(a)和href(@href)都推送到我的数组中。而且我不知道如何同时进行...
    • 你必须使用关联数组,我不确定语法但它应该看起来像这样 ["text"="value","href"="value"].. 你也可以尝试使用哈希
    • 您使用关联数组的想法让我研究了它是什么。阅读文章,我发现多维数组可能是解决方案。我需要一些时间来确认...谢谢vireshas :)
    • 不客气,马克..我将编辑答案以反映您的需要:)
    【解决方案3】:

    感谢 javram 和 vireshad 提供的提示,我设法找到了解决方案。见下文:

    $url = 'http://www.somesite.com';
    $path = '.../a';
    $tableau = array();
    
    $dom = new DOMDocument();
    @$dom->loadHTML($url);
    $xpath = new DomXPath($dom);
    $x = $xpath->query($path);
    
    foreach ($x as $value)
         array_push($tableau, array($value->nodeValue, $value->getAttribute('href')));
    

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2017-11-02
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多