koca101
koca101

Reputation: 3

DOM Xpath get desired result only

$some_link = 'http://www.example.com';
$abc = 'killer';
$bcd = 'awsome';
$cde = 'qwerty';

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);

$html = getTags( $dom, $abc, $bcd, $cde );
echo $html;

function getTags( $dom, $abc, $bcd, $cde ){
    $html = '';
    $domxpath = new DOMXPath($dom);
    $newDom = new DOMDocument;
    $newDom->formatOutput = true;

    $defffff = $domxpath->query("//$abc" . '[@' . $bcd . "='$cde']");

    // since above returns DomNodeList Object
    //  converting to string(html)
    $i = 0;
    while( $myItem = $defffff->item($i++) ){
        $node = $newDom->importNode( $myItem, true );    // import node
        $newDom->appendChild($node);                    // append node
    }
    $html = $newDom->saveHTML();
    return $html;
}

?>

this is the whole code. it is returning multiple results in a row, now what I want is to have ONLY the result no.1 and no.5. How can I do it?

I am new to DOM, tried several things but no success. Thanks in Advance

Upvotes: 0

Views: 32

Answers (1)

Alex Andrei
Alex Andrei

Reputation: 7283

Change this

$i = 0;
while( $myItem = $defffff->item($i++) ){
    $node = $newDom->importNode( $myItem, true );    // import node
    $newDom->appendChild($node);                    // append node
}

into this, in order to append only selected nodes

$i = 0;
while( $myItem = $defffff->item($i++) ){
    if ($i==0 or $i==4){
        $node = $newDom->importNode( $myItem, true );    // import node
        $newDom->appendChild($node);                    // append node
    }
}

or you if you know the indexes you want already, you can do this

$myIndexes = array (0,4);
foreach ($myIndexes as $i){
    $myItem = $defffff->item($i++);
    $node = $newDom->importNode( $myItem, true );    // import node
    $newDom->appendChild($node);                    // append node
}

Upvotes: 1

Related Questions