Ваш код не работает и не имеет смысла
1 $query = '/html/body/channel/item/title';
2 $xpath->query($query);
3 $i = 0;
4 foreach ($xpath->query($query) as $key)
5 {
6 echo '<p>'.$xpath->query($query) -> item($i) -> nodeValue . '</p><br />';
7 $i++;
8 }
будет запрашивать элементы заголовка (2), но поскольку результат не назначен, он является излишним.Затем вы делаете foreach и запрашиваете снова (4).На этот раз вы назначаете каждому заголовку DOMElement $ key (что неверно в imo).В foreach вы делаете еще один запрос для элементов title (6) и извлекаете элементы items / title из него из переменной counter (3/6).Это также излишне, потому что у вас уже есть этот элемент в $ key (3).Таким образом, вы делаете три одинаковых запроса, где вам нужен только один, и вы делаете foreach, не используя его.
Это должно быть
foreach ($xpath->query('/html/body/channel/item/title') as $titleElement) {
printf('<p>%s</p>', $titleElement->nodeValue);
}
Поскольку вы уже используете DOM для работы с разметкойВы также можете создать элемент p с ним вместо использования конкатенации строк, например
foreach ($xpath->query('/html/body/channel/item/title') as $titleElement) {
echo $domDocument->saveXml(
$domDocument->createElement('p', $titleElement->nodeValue)
);
}
Если вы хотите, чтобы элементы ссылки были изменены, измените XPath, чтобы запросить его вместо заголовка.Кавычки в значении узла не имеют к этому никакого отношения.Они покажутся просто отлично.
Полный рабочий пример, показывающий, как объединить элементы <title>
и <link>
в <a>
элементы