1

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!

Oyeme
  • 11,088
  • 4
  • 42
  • 65
  • Have you try using Xpath Notation using queryXpath method instead of execute method ? – SmasherHell Nov 07 '13 at 14:56
  • I used notation..and it's still the same – Oyeme Nov 07 '13 at 14:57
  • //div[contains(concat(' ', normalize-space(@class), ' '), ' accordion-group ')][contains(concat(' ', normalize-space(@class), ' '), ' exportable ')] – Oyeme Nov 07 '13 at 14:57
  • I've posted one more question,because I had't recived any answers using DOMXpath notation http://stackoverflow.com/questions/19839112/xpath-get-first-nodes – Oyeme Nov 07 '13 at 14:58
  • Well I suppose your div.accordion is in a specific container. Using "container > .accordion" selects direct children of a container. – SmasherHell Nov 07 '13 at 15:06
  • What can be solution for this? – Oyeme Nov 07 '13 at 15:11

1 Answers1

2

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



)
SmasherHell
  • 894
  • 8
  • 19