Как сохранить HTML код в XML?
Мне нужно сохранить HTML код в XML файл, для этого используется следующий код:
$xml = new SimpleXMLElement('<texts/>'); $xml->addChild('text', $myHtmlCode); $xml->asXML('path/to/file.xml'); |
$xml = new SimpleXMLElement('<texts/>'); $xml->addChild('text', $myHtmlCode); $xml->asXML('path/to/file.xml');
Данные успешно сохраняются, проблема в том что я не могу их получить, так как данный код:
$myData = simplexml_load_file('path/to/file.xml');
Возвращает различные ошибки парсинга XML, то:
simplexml_load_file() parser error: Entity 'nbsp' not defined |
simplexml_load_file() parser error: Entity 'nbsp' not defined
или:
Validation error : EntityRef: expecting ';'
Как можно сохранить HTML в XML и избежать подобных проблем?
Дополнительно:
htmlentities / htmlentities_decode
$xml->addChild('text', html_entity_decode($myHtmlCode)); |
$xml->addChild('text', html_entity_decode($myHtmlCode));
В итоге получил вторую указанную ошибку:
Validation error : EntityRef: expecting ';'
Может, у вас там тупо невалидный HTML, который браузер прожевывает, а парсеры бранятся.
SimpleXMLElement может оказаться слишком simple
попробуйту jsoup
А если отвечать "в лоб", то попробовать CDATA
Хотите вы валидировать или нет, но пока ваш XML не будет валидным - вы ничем из него информацию не прочтете.
А чтобы засунуть в XML другие XML-based языки разметки (например, HTML), текст в них нужно ЗАкодировать, чтобы исключить из него символы, ломающие разметку XML.
Самый первый ваш комментарий не имеет смысла.
Но после него автор вопроса решил попробовать ваше же преложение.
И теперь вы ему пеняете уже за это.
Чуваку нужна XML, набитая текстами страниц. Кому-то скормить хочет, надо полагать.
Чтобы эти тексты не ломали эту XML, их придется закодировать.
Что я неправильно понял?
но вот кодирует она немного не так.
Но я сейчас уже вижу, что там стоит запрет повторного кодирования, так что ваша рекомендация на самом деле должна сработать. Только без html_entity_decode
Забавно будет, если он просто загнал огромный текст, поймал ограничения SimpleXML и вопрос ни о чем.
Это был паллиатив на случай, если задача одноразовая и нужно просто разобраться, что глючит (по вашей ошибке получалось, что XML, скорее всего, вообще ни при чем).
В итоге переписал всё с использованием библиотеки DOMDocument где можно нормально работать с CDATA. Спасибо огромное IvanU7n за подсказку)
Ответы:
Использовать CDATA, без вариантов.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для сохранения HTML кода в XML формате можно воспользоваться специальными функциями и методами, которые предоставляют различные языки программирования. Одним из способов является использование PHP функций для работы с XML.
Вот пример кода на PHP, который позволяет сохранить HTML код в XML:
// Создаем новый документ XML $xml = new DomDocument('1.0', 'UTF-8'); // Создаем корневой элемент $html = $xml->createElement('html'); $xml->appendChild($html); // Создаем элемент body $body = $xml->createElement('body'); $html->appendChild($body); // HTML код, который нужно сохранить $htmlCode = '<div><p>Hello, World!</p></div>'; // Добавляем HTML код в элемент body $body->appendChild($xml->createCDATASection($htmlCode)); // Сохраняем XML документ в файл $xml->formatOutput = true; $xml->save('output.xml');
В данном примере мы создаем новый XML документ, добавляем в него корневой элемент "html" и элемент "body", а затем добавляем HTML код в виде CDATA в элемент "body". CDATA позволяет сохранить HTML код в XML без его обработки как обычного текста.
После этого мы сохраняем XML документ в файл с помощью метода save(). Теперь у вас будет файл "output.xml", в котором будет сохранен ваш HTML код в формате XML.
Таким образом, используя подобный подход, вы сможете сохранить HTML код в XML формате с помощью PHP.