Вытянуть только первые элементы DOM используя DOMXpath с классами accordion-group exportable
(Ребенки не нужны отдельно)
Имеем html
<div class="accordion-group exportable">
Test1
<div class="accordion-group exportable">
Test2
<div class="accordion-group exportable">
Test3
</div>
</div>
</div>
<div class="accordion-group exportable">
Name1
<div class="accordion-group exportable">
Name2
<div class="accordion-group exportable">
Name3
</div>
</div>
</div>
Вытянуть только первые вложения дивов.
Вывод должен быть таким:
Первый объект:
object(DOMElement)#3 (18) {
["tagName"]=>
string(3) "div"
["schemaTypeInfo"]=>
NULL
["nodeName"]=>
string(3) "div"
["nodeValue"]=>
string(72) "
Test1
Test2
Test3
"
["nodeType"]=>
int(1)
["parentNode"]=>
string(22) "(object value omitted)"
["childNodes"]=>
string(22) "(object value omitted)"
["firstChild"]=>
string(22) "(object value omitted)"
["lastChild"]=>
string(22) "(object value omitted)"
["previousSibling"]=>
NULL
["nextSibling"]=>
string(22) "(object value omitted)"
["attributes"]=>
string(22) "(object value omitted)"
["ownerDocument"]=>
string(22) "(object value omitted)"
["namespaceURI"]=>
NULL
["prefix"]=>
string(0) ""
["localName"]=>
string(3) "div"
["baseURI"]=>
NULL
["textContent"]=>
string(72) "
Test1
Test2
Test3
"
}
И второй обект
object(DOMElement)#6 (17) {
["tagName"]=>
string(3) "div"
["schemaTypeInfo"]=>
NULL
["nodeName"]=>
string(3) "div"
["nodeValue"]=>
string(73) "
Name1
Name2
Name3
"
["nodeType"]=>
int(1)
["parentNode"]=>
string(22) "(object value omitted)"
["childNodes"]=>
string(22) "(object value omitted)"
["firstChild"]=>
string(22) "(object value omitted)"
["lastChild"]=>
string(22) "(object value omitted)"
["previousSibling"]=>
string(22) "(object value omitted)"
["attributes"]=>
string(22) "(object value omitted)"
["ownerDocument"]=>
string(22) "(object value omitted)"
["namespaceURI"]=>
NULL
["prefix"]=>
string(0) ""
["localName"]=>
string(3) "div"
["baseURI"]=>
NULL
["textContent"]=>
string(73) "
Name1
Name2
Name3
"
}
То есть два первых дива без поиска внутри.
<div class="accordion-group exportable">
Test1
<div class="accordion-group exportable">
Test2
<div class="accordion-group exportable">
Test3
</div>
</div>
</div>
И второй
<div class="accordion-group exportable">
Name1
<div class="accordion-group exportable">
Name2
<div class="accordion-group exportable">
Name3
</div>
</div>
</div>
Example
$html = '
<div class="accordion-group exportable">
Test1
<div class="accordion-group exportable">
Test2
<div class="accordion-group exportable">
Test3
</div>
</div>
</div>
<div class="accordion-group exportable">
Name1
<div class="accordion-group exportable">
Name2
<div class="accordion-group exportable">
Name3
</div>
</div>
</div>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' accordion-group ')][contains(concat(' ', normalize-space(@class), ' '), ' exportable ')]");
foreach ($tags as $tag) {
var_dump($tag->nodeValue);
}
В моем примере выводит все 6 вложенных дивов.
Ставил предикаты вначале как "." и как self:node() никак не реагирует.
Читал
http://www.w3schools.com/xpath/xpath_syntax.asp
Не помогло,никак не реагирует на self:node
nodename Selects all nodes with the name "nodename"
/ Selects from the root node
// Selects nodes in the document from the current node that match the selection no matter where they are
. Selects the current node
.. Selects the parent of the current node
@ Selects attributes
Вот такая вот интересная задача.
У кого какие мысли?