PHP Script для «фильтрации» определенной части дерева DOM - PullRequest
0 голосов
/ 02 февраля 2011

Я ищу сценарий php, который может пройти через вывод HTML функции PHP, отфильтровать один ее фрагмент и вернуть соответствующий бит.

Так что я использую функцию php, и она выводит код, подобный этому:

<ul>
<li>blabla</li>
<li>blabla</li>
<li>
   <ul>
     <li>This is interesting!</li>
     <li>This too!</li>
   </ul>
</li>
</ul>

Я просто хочу вложенный UL, а не родительский UL. Так что просто так:

<ul>
   <li>This is interesting!</li>
   <li>This too!</li>
</ul>

Поскольку я все еще изучаю PHP, я понятия не имею, как это сделать ... Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Вам необходимо использовать класс DOMDocument и связанные с ним классы. Вам, вероятно, также следует использовать DOMXPath для поиска. Ваш код может выглядеть примерно так:

$dom = new DOMDocument;
$dom->loadXML($str); // where $str is the HTML string

$x = new DOMXPath($dom);

$childuls = $x->query('//ul/li/ul'); // find ul elements with parent ul and li
echo $dom->saveXML($childuls->item(0)); // output the XML for this element only
0 голосов
/ 02 февраля 2011

Вы можете использовать простой дом для этого: http://simplehtmldom.sourceforge.net/

Simple dom позволяет назначать обратный вызов для каждого элемента в html, вот пример:

function my_callback($element)
{
    if ($element->tag=='b')
    {
        $element->outertext = str_replace("apples","oranges",$element->innertext);
    }
}

и вы можете работать с ним так:

$html = str_get_html('<html> your data </html>');
$html->set_callback('my_callback');

echo $html; //Modifed

html модифицируется только при сбрасывании данных, если вам нужно внести определенные изменения, лучше всего делать их вручную, например, так:

$elements = $html->find('ul li ul');

если вы хотите каким-то образом изменить li, вы можете сделать:

foreach($elements as $item) 
{
    $item->class = "some_class";
}
0 голосов
/ 02 февраля 2011

Я буду продолжать защищать эту библиотеку, потому что она просто потрясающая :) http://simplehtmldom.sourceforge.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...