Как сохранить HTML код в XML?

Ссылка скопирована
1 ответ

Мне нужно сохранить 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

  • Adamos, пробовал использовать html_entities_decode():
    $xml->addChild('text', html_entity_decode($myHtmlCode));

    $xml->addChild('text', html_entity_decode($myHtmlCode));

    В итоге получил вторую указанную ошибку:
    Validation error : EntityRef: expecting ';'

  • JastaFly, смотрите на ввод там, где ее получаете.
    Может, у вас там тупо невалидный HTML, который браузер прожевывает, а парсеры бранятся.
  • Adamos, Да в том-то и прикол что мне вообще не нужно чтобы он валидировался, просто сохранить, потом извлечь, желательно серьёзных изменений
  • я бы прежде всего попробовал другой API: DOMDocument + DOMCdataSection / DOMNode->textContent
    SimpleXMLElement может оказаться слишком simple
  • JastaFly, не тот нисрумент выбрали

    попробуйту jsoup

  • Вот да, если "просто сохранить, потом извлечь" то ЗАЧЕМ XML?
    А если отвечать "в лоб", то попробовать CDATA
  • JastaFly, сразу не заметил - вы ДЕкодируете HTML перед тем, как запихнуть в XML? То есть вообще не понимаете, что делаете?
    Хотите вы валидировать или нет, но пока ваш XML не будет валидным - вы ничем из него информацию не прочтете.
    А чтобы засунуть в XML другие XML-based языки разметки (например, HTML), текст в них нужно ЗАкодировать, чтобы исключить из него символы, ломающие разметку XML.
  • Adamos, вы очень много суетитесь, при том что все ваши комментарии не в тему.
    Самый первый ваш комментарий не имеет смысла.
    Но после него автор вопроса решил попробовать ваше же преложение.
    И теперь вы ему пеняете уже за это.
  • Ипатьев, хуже того - я не понимаю вашей претензии.
    Чуваку нужна XML, набитая текстами страниц. Кому-то скормить хочет, надо полагать.
    Чтобы эти тексты не ломали эту XML, их придется закодировать.
    Что я неправильно понял?
  • Adamos, ну начать надо с того, что addChild вообще-то уже кодирует. Иначе эта функция не имела бы смысла.
    но вот кодирует она немного не так.
    Но я сейчас уже вижу, что там стоит запрет повторного кодирования, так что ваша рекомендация на самом деле должна сработать. Только без html_entity_decode
  • Ипатьев, кодирует она только треугольные скобки. А у ТС ошибка на  , хотя и не знаю, почему.
    Забавно будет, если он просто загнал огромный текст, поймал ограничения SimpleXML и вопрос ни о чем.
  • Adamos вариант с кодированием хренов из-за того что данные придётся восстанавливать в исходное состояние а при кодировании/декодирование исходная вёрстка может пострадать. Варина с CDATA проще, а значит лучше
  • JastaFly, истинно так.
    Это был паллиатив на случай, если задача одноразовая и нужно просто разобраться, что глючит (по вашей ошибке получалось, что XML, скорее всего, вообще ни при чем).
  • В итоге переписал всё с использованием библиотеки DOMDocument где можно нормально работать с CDATA. Спасибо огромное IvanU7n за подсказку)

    Ответы:

    Использовать CDATA, без вариантов.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для сохранения 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-&gt;appendChild($xml-&gt;createCDATASection($htmlCode));
     
    // Сохраняем XML документ в файл
    $xml-&gt;formatOutput = true;
    $xml-&gt;save('output.xml');

    // Создаем новый документ XML $xml = new DomDocument('1.0', 'UTF-8'); // Создаем корневой элемент $html = $xml-&gt;createElement('html'); $xml-&gt;appendChild($html); // Создаем элемент body $body = $xml-&gt;createElement('body'); $html-&gt;appendChild($body); // HTML код, который нужно сохранить $htmlCode = '<div><p>Hello, World!</p></div>'; // Добавляем HTML код в элемент body $body-&gt;appendChild($xml-&gt;createCDATASection($htmlCode)); // Сохраняем XML документ в файл $xml-&gt;formatOutput = true; $xml-&gt;save('output.xml');

    В данном примере мы создаем новый XML документ, добавляем в него корневой элемент "html" и элемент "body", а затем добавляем HTML код в виде CDATA в элемент "body". CDATA позволяет сохранить HTML код в XML без его обработки как обычного текста.

    После этого мы сохраняем XML документ в файл с помощью метода save(). Теперь у вас будет файл "output.xml", в котором будет сохранен ваш HTML код в формате XML.

    Таким образом, используя подобный подход, вы сможете сохранить HTML код в XML формате с помощью PHP.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно