Вопрос или проблема
Я использую плагин WP All Export на своем сайте WordPress для экспорта пользовательских XML-данных, в частности, списка URL-адресов изображений, каждый из которых находится в индивидуальных XML-узлах. Однако WP All Export продолжает оборачивать весь вывод в CDATA, что нарушает необходимую мне структуру XML.
Текущий вывод
Вот что я в настоящее время получаю в экспортируемом файле:
<photos>
<![CDATA[
<image_1>https://example.com/image1.jpg</image_1>
<image_2>https://example.com/image2.jpg</image_2>
<image_3>https://example.com/image3.jpg</image_3>
...
]]>
</photos>
Ожидаемый вывод
Я хочу получить вывод без обертки CDATA, вот так:
<photos>
<image_1>https://example.com/image1.jpg</image_1>
<image_2>https://example.com/image2.jpg</image_2>
<image_3>https://example.com/image3.jpg</image_3>
...
</photos>
Код, который я пробовал
Вот PHP код, который я использую для генерации XML-узлов. Я пробовал как SimpleXMLElement, так и DOMDocument, но WP All Export все еще оборачивает результат в CDATA:
function export_images_as_nodes($images) {
if (is_string($images)) {
$images = explode('|', $images);
}
if (empty($images) || !is_array($images)) {
return '';
}
$xml_output = "<photos>\n";
foreach ($images as $index => $url) {
$url = trim($url);
if (!empty($url)) {
$node_name = "image_" . ($index + 1);
$xml_output .= "\t<{$node_name}>{$url}</{$node_name}>\n";
}
}
$xml_output .= "\n";
return $xml_output;
}
Что я пробовал
• SimpleXMLElement: Также приводит к обертке CDATA.
• DOMDocument: Как показано в коде выше, но все равно без успеха.
• Установка WP All Export на исходный вывод: Я проверил все параметры полей в WP All Export, чтобы убедиться, что он настроен на вывод в виде сырого XML, но он все равно оборачивает в CDATA.
Вопрос
Как я могу предотвратить оборачивание моего пользовательского XML-выхода в CDATA с помощью WP All Export? Существует ли настройка или обходной путь для принудительного вывода чистого XML в этом случае?
Дополнительные заметки:
- WP All Export, похоже, не предоставляет прямого контроля над CDATA для
пользовательских полей. - Структура моего экспорта требует, чтобы каждый URL-адрес изображения был
выводен как XML-узел, а не в пределах одного блока CDATA.
Ответ или решение
Для решения проблемы с WP All Export и предотвращения обертывания ваших XML-узлов в CDATA необходимо рассмотреть несколько важных аспектов.
Понимание проблемы
WP All Export по умолчанию может оборачивать данные в CDATA, особенно если данные содержат символы, которые могут быть интерпретированы как XML. Это может привести к нежелательному формату вывода, как в вашем случае, когда нужно сохранить структуру XML. Вы пытаетесь экспортировать изображения в виде отдельных XML-узлов, но получаете конечный продукт, который содержит CDATA, что нарушает вашу ожидаемую структуру.
Шаги для предотвращения обертывания в CDATA:
-
Использование простого текстового вывода: Убедитесь, что вы используете текстовый вывод без дополнительных обертывающих тегов, чтобы избежать автоматического создания CDATA.
-
Изменение вашего кода: Несмотря на то, что вы уже пробовали использовать SimpleXMLElement и DOMDocument, попробуйте другой подход для форматирования. Следующий код основан на использовании строки:
function export_images_as_nodes($images) { if (is_string($images)) { $images = explode('|', $images); } if (empty($images) || !is_array($images)) { return ''; } $xml_output = "<photos>\n"; foreach ($images as $index => $url) { $url = trim($url); if (!empty($url)) { $node_name = "image_" . ($index + 1); $xml_output .= "\t<{$node_name}>{$url}</{$node_name}>\n"; } } $xml_output .= "</photos>\n"; return $xml_output; }
Убедитесь, что вы выводите результат именно как часть текста, а не как XML-объект, чтобы избежать проблемы с CDATA.
-
Изменение настроек WP All Export:
- Зайдите в настройки вашего экспорта.
- Найдите параметры, связанные с выводом данных (data output). Убедитесь, что выбраны соответствующие опции, которые минимизируют обработку данных. Проверьте наличие опции "Raw Output" и включите ее, если это возможно.
-
Использование фильтров или хуков: В некоторых случаях использование PHP-фильтров или хуков, предоставляемых WP All Export, может помочь изменить поведение вывода. Обратите внимание на следующее:
add_filter('wp_all_export_xml_content', 'remove_cdata_wrapper'); function remove_cdata_wrapper($content) { // Удаляем CDATA, если оно присутствует return preg_replace('/<!\[CDATA\[(.*?)\]\]>/', '$1', $content); }
Это может помочь удалить ненужное обертывание CDATA из окончательного результата.
-
Обратитесь в службу поддержки: Если предыдущие шаги не решают проблему, возможно, стоит обратиться в службу поддержки WP All Export. Они могут предложить специфические решения или обновления плагина, которые помогут исправить это поведение.
Заключение
Предотвращение обертывания XML-узлов в CDATA в WP All Export может потребовать комбинации изменений в вашем коде, настройках плагина и использовании фильтров. Тщательный подход к написанию вывода и настройке параметров экспорта поможет получить требуемую XML-структуру без CDATA. Надеюсь, эти рекомендации помогут вам добиться желаемого результата.