Search code examples
domzend-framework2zend-dom-query

DOM Query How to get the first levels of matching?


I need to take all matches on first level depth http://framework.zend.com/manual/2.0/en/modules/zend.dom.query.html

It shows me all matches that contain class accordion + all child matches

$dom = new Query($html);
$results = $dom->execute('.accordion');

I'm getting all 6 nodes with class .accordion

Html

<div class="accordion">
    Test1
    <div class="accordion">
      Test2
        <div class="accordion">
            Test3
        </div>
    </div>
</div>
<div class="accordion">
    Name
    <div class="accordion">
      Name2
        <div class="accordion">
            Name3
        </div>
    </div>
</div>

How Can I take only the first levels of DOM Objcets(Nodelist) without childs?
It should be
First object

<div class="accordion">
    Name
    <div class="accordion">
      Name2
        <div class="accordion">
            Name3
        </div>
    </div>
</div>

Second object

<div class="accordion">
    Name
    <div class="accordion">
      Name2
        <div class="accordion">
            Name3
        </div>
    </div>
</div>

Thanks!


Solution

  • Well I've tested some code

        $html = '
            <div class="container">
               <div class="accordion">
                Test1
                <div class="accordion">
                  Test2
                    <div class="accordion">
                        Test3
                    </div>
                </div>
            </div>
            <div class="accordion">
                Name
                <div class="accordion">
                  Name2
                    <div class="accordion">
                        Name3
                    </div>
                </div>
            </div>
         </div>
        ';
    
       $dom = new \Zend\Dom\Query($html);
       // Will returns the first levels .accordion in .container ($results length is 2)
       $results = $dom->queryXpath('//div[@class="container"]/div[@class="accordion"]');
       echo '<pre>';
       foreach($results as $result){
           print_r($result);
       }
       exit;
    

    echo :

    DOMElement Object
    (
        [tagName] => div
        [schemaTypeInfo] => 
        [nodeName] => div
        [nodeValue] => 
                    Test1
    
                      Test2
    
                            Test3
    
    
    
        [nodeType] => 1
        [parentNode] => (object value omitted)
        [childNodes] => (object value omitted)
        [firstChild] => (object value omitted)
        [lastChild] => (object value omitted)
        [previousSibling] => (object value omitted)
        [nextSibling] => (object value omitted)
        [attributes] => (object value omitted)
        [ownerDocument] => (object value omitted)
        [namespaceURI] => 
        [prefix] => 
        [localName] => div
        [baseURI] => 
        [textContent] => 
                    Test1
    
                      Test2
    
                            Test3
    
    
    
    )
    
    DOMElement Object
    (
        [tagName] => div
        [schemaTypeInfo] => 
        [nodeName] => div
        [nodeValue] => 
                    Name
    
                      Name2
    
                            Name3
    
    
    
        [nodeType] => 1
        [parentNode] => (object value omitted)
        [childNodes] => (object value omitted)
        [firstChild] => (object value omitted)
        [lastChild] => (object value omitted)
        [previousSibling] => (object value omitted)
        [nextSibling] => (object value omitted)
        [attributes] => (object value omitted)
        [ownerDocument] => (object value omitted)
        [namespaceURI] => 
        [prefix] => 
        [localName] => div
        [baseURI] => 
        [textContent] => 
                    Name
    
                      Name2
    
                            Name3
    
    
    
    )