Можем ли мы использовать Array Element в DomDocument и вложить xpath? - PullRequest
0 голосов
/ 06 февраля 2012

Я использую следующий код

    $page_data=array();//$title_links is array having urls
     $nodearr=array();
    foreach ($title_links as $b_url)
    {
        $page_data[]= mycurl($b_url);//my curl function, it is okay

        $dom2 = new DOMDocument();//creating new domdocument object inside a domdocument object
        @$dom2->loadHTML($page_data[]); 
        $xpath_cat = new DOMXPath($dom2);//same as domdocument , nesting xpath
        $nodelist = $xpath_cat->query('//span[@class="zg_hrsr_ladder"]', $dom2);
//echo nodeslist;

foreach ($nodelist as $node) {
   $nodearr[] = $node->textContent;
 }


    }

, поэтому scenerio:

Я вложил 'domdocument' в другой 'DomDocument' используя 'цикл foreach', я вставляю элемент массива в DomDocument так же, как и сам документ nestind внутри документа, поэтому я объявляю новый запрос xpath

Вопрос в том ...

Это нормально?Это приемлемая методика программирования? Плюсы и минусы? Есть ли альтернатива этому?

Пояснение:

$ title_links получается с помощью curl, это URL-адреса, извлеченные из веб-страницы с использованием domdocument и запроса xpath., поэтому $ title_links находится на первом уровне xpath и domdocument, а $ nodelist находится на 2-м уровне вложенности od xpath и dom-document

1 Ответ

0 голосов
/ 06 февраля 2012

Ваша причина его неудачи в следующем: @$dom2->loadHTML($page_data[]);

[] может использоваться только для назначения, но не для чтения. У вас должен быть ключ, на который вы можете ссылаться. Я бы, наверное, сделал это так:

$page_data=array();//$title_links is array having urls
foreach ($title_links as $key => $b_url)
{
    $page_data[$key]= mycurl($b_url);//my curl function, it is okay

    $dom2 = new DOMDocument();
    $dom2->loadHTML($page_data[$key]); // error suppression is evil!
    $xpath_cat = new DOMXPath($dom2);

}

Что мне до сих пор неясно, так это то, как именно здесь происходит какое-либо вложение, вы ничего не вкладываете, вы просто перебираете массив.

...