PHP Fix получить div из функции URL - PullRequest
0 голосов
/ 27 августа 2011

У меня есть этот код

function innerHTML($element) 
{ 
    $innerHTML = ''; 
    $children = $element -> childNodes; 
    foreach ((array)$children as $child) 
    { 
        $tmp_dom = new DOMDocument(); 
        $tmp_dom -> appendChild($tmp_dom -> importNode($child, true)); 
        $innerHTML .= trim($tmp_dom -> saveHTML()); 
    } 

    return $innerHTML; 
}

function DOMGet($html, $class, $num = 0, $type = "class")
{
    $dom = new DOMDocument('1.0', 'utf-8');
    @$dom -> loadHTML($html);
    $xpath = new DOMXPath($dom);
    $q = '//div[@'.$type.'="'.$class.'"]';

    if(is_numeric($num))
    {
        $arr = $xpath -> query($q);
        $arr = $arr -> item($num);

        return innerHTML($arr);
    }
    else if(strtoupper($num) == "ALL")
    {
        $arr = $xpath -> query($q);
        $abs = array();

        foreach($arr as $el) $abs[] = innerHTML($el);
        return $abs;

    }

    return false;
}

Но он совсем не работает, Иногда, когда я пытаюсь вызвать тег (например, class = "test"), он ничего не показывает!Кто-то может исправить код?

Ответы [ 2 ]

0 голосов
/ 27 августа 2011

Это твой метод m_INNER, который мешает тебе. Вы могли бы раздеть это к чему-то как в моем примере, и это будет прекрасно работать.

function m_INNER($element) 
{ 
    $innerHTML = ''; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
        $innerHTML .= $child->ownerDocument->saveXML( $child ); 
    } 

    return $innerHTML; 
}

function DOMGet($html, $class, $num = 0, $type = "class")
{

    $dom = new DOMDocument('1.0', 'utf-8');
    @$dom -> loadHTML($html); // You don't need the @ declaration here.
    $xpath = new DOMXPath($dom);
    $q = '//div[@'.$type.'="'.$class.'"]';

    if(is_numeric($num))
    {
        $arr = $xpath -> query($q);
        $arr = $arr -> item($num);

        return m_INNER($arr);
    }

    else if(strtoupper($num) == "ALL")
    {
        $arr = $xpath -> query($q);
        $abs = array();

        foreach($arr as $el) $abs[] = m_INNER($el);
        return $abs;

    }

    return false;
}


$html = '<html><body><div class="apa">Test</div></body></html>';

print_r(DOMGet($html, "apa"));

Это работает

Приветствия

0 голосов
/ 27 августа 2011

Вы не можете привести DOMNodeList к массиву, он, очевидно, возвращает пустой массив.

...