[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск элемента по аттрибуту
McLotos
Всем привет. Вот возникла необходимость найти все элементы с определнным аттрибутом, кто-нибудь знает есть что-то такое в phpDOM?
А-то уже начал изобретать велосипед
getElementByAttribute($attrName,$attrVal)
{
//если value не передан, выдать массив со всем тэгами где есть $attrName
//если value передано, выдать массив со всеми тэгами где $attrName==$attrVal

}


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
volter9
McLotos
Я использую simple dom parser для парсинга DOM'а вместо PHP DOM, он простой но при этом почти как jQuery (наверное тут я переборщил).

Вот пример как найти элемент по атрибуту:

require 'simple_html_dom.php';

$html = str_get_html('<div data-attr="test">Hello</div><div data-id="world">World</div>');

$test = $html->find('div[data-attr=test]', 0);

echo $test->innertext;


_____________
Мой блог
McLotos
просто simple dom parser это велосипед, я пытаюсь работать со стандартными возможностями языка
Т.е. в стандартном php такого нет?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
Цитата (McLotos @ 20.01.2015 - 08:29)
Т.е. в стандартном php такого нет?

А чем тебе вот это http://php.net/manual/ru/domdocument.loadhtmlfile.php не нравится??? Загрузил, разобрал на части, сделал всё, что нужно. Можно из строки загрузить http://php.net/manual/ru/domdocument.loadhtml.php, не обязательно из файла.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
sergeiss
У меня уже собрана модель документа, мне нужно найти в ней все элементы у которых есть определенный атрибут с некоторыми значениями, например найти все элементы у которых class==test
Ну это грубо, на самом деле параметр может быть любым, и его значение тоже, или значения вообще может не быть.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
Цитата (McLotos @ 20.01.2015 - 09:33)
У меня уже собрана модель документа, мне нужно найти в ней все элементы у которых есть определенный атрибут с некоторыми значениями, например найти все элементы у которых class==test

Чуть подробнее... Где именно у тебя "собрана модель документа"?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
  $this -> dom = new DOMDocument;
libxml_use_internal_errors(true);
libxml_clear_errors();
$this -> buffer = implode($this -> buffer);
$this -> dom -> substituteEntities = TRUE;
$this -> dom -> validateOnParse = TRUE;
$this -> dom -> formatOutput = TRUE;
$this -> dom -> encode = 'UTF-8';
$this -> dom -> loadHTML($this -> buffer);
$this -> dom -> loadHTML('<?xml encoding="UTF-8">'.$this -> buffer);
foreach ($this -> dom -> childNodes as $item)
{
if ($item -> nodeType==XML_PI_NODE)
{
$this -> dom -> removeChild($item);
}
}

$this -> dom -> encoding = 'UTF-8';
$this -> findRequired();
$this -> dom -> preserveWhiteSpace = TRUE;

Хочу теперь в $this -> dom найти все тэги у которых например class==test
Просто сейчас мне приходится у каждого элемента проверять существование атрибута и соответствует ли значение атрибута нужному значению.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

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