Как предотвратить упаковку узлов XML в CDATA в WP All Export?

Вопрос или проблема

Я использую плагин 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:

  1. Использование простого текстового вывода: Убедитесь, что вы используете текстовый вывод без дополнительных обертывающих тегов, чтобы избежать автоматического создания CDATA.

  2. Изменение вашего кода: Несмотря на то, что вы уже пробовали использовать 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.

  3. Изменение настроек WP All Export:

    • Зайдите в настройки вашего экспорта.
    • Найдите параметры, связанные с выводом данных (data output). Убедитесь, что выбраны соответствующие опции, которые минимизируют обработку данных. Проверьте наличие опции "Raw Output" и включите ее, если это возможно.
  4. Использование фильтров или хуков: В некоторых случаях использование 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 из окончательного результата.

  5. Обратитесь в службу поддержки: Если предыдущие шаги не решают проблему, возможно, стоит обратиться в службу поддержки WP All Export. Они могут предложить специфические решения или обновления плагина, которые помогут исправить это поведение.

Заключение

Предотвращение обертывания XML-узлов в CDATA в WP All Export может потребовать комбинации изменений в вашем коде, настройках плагина и использовании фильтров. Тщательный подход к написанию вывода и настройке параметров экспорта поможет получить требуемую XML-структуру без CDATA. Надеюсь, эти рекомендации помогут вам добиться желаемого результата.

Оцените материал
Добавить комментарий

Капча загружается...