[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: DOMXPath вложения(первые элементы)
Oyeme
Задача
Вытянуть только первые элементы 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


Вот такая вот интересная задача.
У кого какие мысли?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.