Вы можете попробовать использовать xpath вместо метода вложенных циклов ..
Выполнить запрос
gallerylisting//folder[@subfolder="yes"]/text()
на вашем XML-документе, указанном выше, используя этот xpath-тестер дает результаты Events и Beach_Clean_2010, что, как я думаю, вам нужно.Запрос найдет все элементы папки в списке галерей корневого узла, и если они имеют атрибут подпапки, равный «да», будет возвращен текст в узле.
Итак, в PHP у нас есть
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('gallerylisting.xml');
$xpathvar = new Domxpath($xmldoc);
$queryResult = $xpathvar->query('gallerylisting//folder[@subfolder="yes"]/text()');
foreach($queryResult as $result){
echo $result->textContent;
}
?>
Я не парень по PHP, поэтому я доверяю коду в , этот вопрос StackOverflow работает.Следует помнить, что использование // имени в xpath означает поиск всех узлов, произошедших от текущей позиции, которые соответствуют имени.Это может быть очень медленно на больших документах.
Кажется, есть несколько способов обработки xpath с помощью PHP.Пример из этой страницы выполняет запрос следующим образом:
$result = $xml->xpath("gallerylisting//folder[@subfolder="yes"]/text()");
print_r($result);
?>