2012-03-13 6 views
0

Я использую xpath для получения текстового значения некоторых ссылок (a) в данном элементе. Затем я выталкиваю результаты в массив с именем $ tableau. Все работает отлично :) Дело в том, что я хотел бы теперь получить также href этих ссылок. Так что имеют как текстовое значение, так и href в моем массиве. Другое дело, я понятия не имею, как это сделать. Надеюсь, кто-то может помочь. Заранее благодарю за ваши ответы. Приветствия. МаркXPATH - как использовать несколько путей

$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); 

ответ

0

Благодаря подсказкам, данным 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'))); 
1

вы можете использовать ассоциативный массив

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

XPath Xpression для получения HREF всех тегов анкерных что-то вроде этого

("//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 Код

+0

Hello vireshas. Я знаю, как получить href ... Дело в том, что я хотел бы нажать на текстовое значение (a) и href (@href) на мой массив. И я не знаю, как делать оба одновременно ... – Marc

+0

вам нужно использовать ассоциативный массив, я не уверен в синтаксисе, но он должен выглядеть примерно так: ["text" = "value", "href" = «value»] .. вы также можете попробовать использовать хэш – vireshas

+0

Ваша идея использования ассоциативных массивов заставила меня исследовать, что это такое. Читая статьи, я узнал, что многомерные массивы могут быть решением. Мне нужно некоторое время, чтобы подтвердить, что ... Спасибо vireshas :) – Marc

1

Попробуйте следующее:

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

Привет, javram. Спасибо, что пытались помочь. Я знаю, как получить href ... Моя проблема в том, что я не знаю, как нажимать как текстовое значение (a), так и href (@href) на мой массив (одновременно) – Marc

+0

Массив будет иметь хранилище для одна строка в каждом индексе массива. Если вы хотите сохранить несколько значений в каждом индексе массива, вам понадобится массив, который поддерживает сложный тип. Кроме того, вы можете объединить nodeValue и href вместе с разделителем и сохранить его в одной позиции массива. – javram

+0

Основываясь на подсказке vireshas, ​​я узнал, что многомерные массивы могут быть решением. Как я уже сказал, мне нужно время, чтобы проверить это ... Еще раз спасибо, чтобы успеть помочь мне. – Marc

Смежные вопросы