Ответ
В PHP я работал с XML для парсинга конфигураций, обработки данных из внешних API и генерации отчетов. Основные использованные инструменты:
- SimpleXML — для быстрого чтения и простой навигации по XML-структурам.
- DOMDocument — когда требовалось создавать сложные документы, модифицировать узлы или валидировать структуру.
- XPath — для выполнения сложных запросов к XML-документам.
Пример парсинга RSS-ленты с SimpleXML и XPath:
$rss = simplexml_load_file('https://example.com/feed.rss');
// Регистрируем пространство имен, если оно есть
$rss->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');
// Ищем все заголовки статей, опубликованные за последнюю неделю
$items = $rss->xpath('//item[dc:date > "' . date('c', strtotime('-1 week')) . '"]/title');
foreach ($items as $title) {
echo (string) $title . "n";
}
Пример создания XML-документа с DOMDocument для экспорта данных:
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
$root = $dom->createElement('users');
$dom->appendChild($root);
$users = [['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob']];
foreach ($users as $userData) {
$userElement = $dom->createElement('user');
$userElement->setAttribute('id', $userData['id']);
$nameElement = $dom->createElement('name', $userData['name']);
$userElement->appendChild($nameElement);
$root->appendChild($userElement);
}
// Валидация по XSD схеме (если она есть)
if ($dom->schemaValidate('schema/users.xsd')) {
echo $dom->saveXML();
// или $dom->save('export.xml');
}
Также имел дело с валидацией XML через XSD-схемы и преобразованием XML в другие форматы с помощью XSLT.
Ответ 18+ 🔞
Да ты посмотри, какой у нас тут специалист по XML подъехал! Ну что ж, расскажу, как я с этой штукой работал, а то вдруг кому пригодится, хотя, честно говоря, иногда проще JSON спарсить, чем с этими пространствами имён ебаться.
В общем, в PHP я с XML дела имел — и конфиги читал, и данные от каких-то левых API обрабатывал, которые в каменном веке застряли, и отчёты генерировал. Инструменты, в основном, вот эти:
- SimpleXML — это когда надо быстро, без лишних телодвижений, файлик прочитать и по нему пройтись. Удобно, если структура простая и тебе её не надо перекраивать.
- DOMDocument — вот это уже серьёзная артиллерия. Берёшь, когда нужно документ с нуля собрать, узлы там поменять или по строгой схеме проверить. Мощная штука, но и возни с ней, ядрёна вошь, побольше.
- XPath — а это вообще магия. Когда в XML-документе нужно найти что-то конкретное, а он размером с "Войну и мир", XPath тебя спасает. Пишешь запрос, как в базе данных, и получаешь что нужно.
Вот, смотри, как я однажды RSS-ленту парсил, SimpleXML и XPath в деле:
$rss = simplexml_load_file('https://example.com/feed.rss');
// А тут самое весёлое — если в RSS есть эти ебушки-воробушки, пространства имён, их надо зарегить
$rss->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');
// Ищем все заголовки статей, которые за неделю вышли
$items = $rss->xpath('//item[dc:date > "' . date('c', strtotime('-1 week')) . '"]/title');
foreach ($items as $title) {
echo (string) $title . "n";
}
Бывало, конечно, что какой-нибудь feed кривой попадётся, и всё падало — тут уже терпения ноль ебать, идёшь и ругаешься с тем, кто API делает.
А вот пример, когда нужно было данные в XML для какого-то старого сервиса выгрузить. Тут уже DOMDocument в бой пошёл:
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true; // Чтобы красиво было, а не одна строка
$root = $dom->createElement('users');
$dom->appendChild($root);
$users = [['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob']];
foreach ($users as $userData) {
$userElement = $dom->createElement('user');
$userElement->setAttribute('id', $userData['id']);
$nameElement = $dom->createElement('name', $userData['name']);
$userElement->appendChild($nameElement);
$root->appendChild($userElement);
}
// И самое важное — если есть схема XSD, валидируем, а то примут и скажут "чё за хуйню прислал"
if ($dom->schemaValidate('schema/users.xsd')) {
echo $dom->saveXML();
// или $dom->save('export.xml');
} else {
// А тут уже волнение ебать, потому что схему не прошёл и всё надо переделывать
}
Ещё, бывало, через XSLT преобразовывал XML во что-то другое, или наоборот. В общем, инструмент хоть и старый, но в некоторых конторах живёт, как будто на дворе 2002-й год, так что знать его полезно. Главное — не запутаться во всех этих тегах и пространствах, а то можно реально с ума сойти.