Ответ 1
Работа с PHP DOM довольно проста и очень похожа на Javascript DOM.
Вот важные классы:
- DOMNode — Базовый класс для всего, что может быть перемещено внутри XML/HTML-документа, включая текстовые узлы, узлы комментариев и узлы CDATA
- DOMElement — Базовый класс для тегов.
- DOMDocument — Базовый класс для документов. Содержит методы загрузки/сохранения XML, а также обычные методы документа DOM (см. Ниже).
Существует несколько основных методов и свойств:
-
DOMDocument->load()
— Создав новыйDOMDocument
, используйте этот метод для этого объекта для загрузки из файла. -
DOMDocument->getElementsByTagName()
— этот метод возвращает список node всех элементов в документе с указанным именем тега. Затем вы можете выполнять итерацию (foreach
) в этом списке. -
DOMNode->childNodes
— A node список всех дочерних элементов node. (Помните, что CDATA - node!) -
DOMNode->nodeType
— Получите тип node. Узлы CDATA имеют тип XML_CDATA_SECTION_NODE, который является константой со значением 4. -
DOMNode->textContent
— получить текстовое содержимое любого node.
Примечание. Ваши разделы CDATA неверны. Я не знаю, почему в первом есть дополнительный ]]
или незакрытый раздел CDATA в конце строки, но я думаю, что это должно быть просто:
<![CDATA[Aghia Paraskevi, Skiatos, Greece]]>
Соединяя это все вместе:
- Создайте новый объект документа и загрузите XML
- Получить все
Destination
элементы по имени тега и перебрать по списку - Итерации по всем дочерним узлам каждого элемента
Destination
- Проверьте, что тип node
XML_CDATA_SECTION_NODE
- Если это так,
echo
textContent
этого node.
Код:
$doc = new DOMDocument();
$doc->load('test.xml');
$destinations = $doc->getElementsByTagName("Destination");
foreach ($destinations as $destination) {
foreach($destination->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
echo $child->textContent . "<br/>";
}
}
}
Результат:
Агия Параскеви, Скиатос, Греция
Аметтла, Испания
Амолиани, Греция
Боблинген, Германия