Моему PHP-приложению необходимо экспортировать в ряд различных форматов XML:должен ли я использовать XSLT или родной PHP?

StackOverflow https://stackoverflow.com/questions/818679

  •  03-07-2019
  •  | 
  •  

Вопрос

Моему PHP-приложению необходимо будет иметь возможность экспортировать (и импортировать из) ряд различных форматов данных, в основном на основе XML.

У меня есть возможность

  • В PHP используйте DOM для экспорта в некоторый формат на основе XML, который является надмножеством всех данных, необходимых другим, и создайте отдельную таблицу стилей XSLT для каждого выходного формата, который я хочу поддерживать, запустив вывод DOM через расширение PHP XSL.

или

  • Не используя расширение XSL PHP, но реализуя каждый формат вывода в виде класса на родном PHP, который преобразуется непосредственно из внутренних объектов / структур в заданный формат XML с использованием DOM, каждый такой класс реализует один и тот же интерфейс, поэтому они взаимозаменяемы.

Приложение будет использоваться университетами и представляет собой инструмент, который управляет учетными записями "людей" различными способами и импортирует / экспортирует из различных источников, таких как их кадровая система и т.д.Я сам буду внедрять набор форматов ввода и вывода, но в будущем есть вероятность, что кто-то, использующий его, захочет изменить его для поддержки своего собственного формата.

Одна из причин, по которой я рассматриваю ВОЗМОЖНОСТЬ ОТКАЗА от использования XSLT, заключается в том, что если кто-то еще, кроме меня, собирается поддерживать приложение в будущем, то, похоже, очень немногие люди вообще знают XSLT - гораздо больше людей, похоже, знают PHP.

Другое дело, что второе кажется более эффективным и "программируемым" решением и более гибким в том смысле, что я мог бы выводить и импортировать из форматов, отличных от XML, таких как CSV или текст на основе столбцов, так же легко, перегружая необходимые части класса, не то чтобы это часто было необходимо.

Третья, но очень маленькая и незначительная причина заключается в том, что PHP нуждается в перекомпиляции для включения XSL, тогда как DOM включен по умолчанию, поэтому он был бы немного более переносимым.Однако это не слишком большая проблема, так как PHP легко перенастроить.

Что вы думаете о моих рассуждениях?

Это было полезно?

Решение

Мое личное мнение таково, что ваше решение должно основываться в значительной степени на том факте, как вы оцениваете знания XSLT в вашей целевой аудитории.Если ясно, что XSLT каким-то образом является "terra incognita" среди людей, работающих с системой (включая вас), вы можете исключить XSLT-решение.Необходимость и усилия по изучению XSLT сведут на нет преимущества (очень элегантные - особенно при преобразовании XML в XML, нет необходимости возиться с PHP-кодом, знание PHP не требуется), которые вы получите от XSLT-решения.

Возможно, двустороннее решение было бы правильным решением.Вы могли бы создать адаптерную систему для импорта и экспорта, которая использует XSLT для форматов данных XML и предоставляет возможность использовать PHP-код для всех форматов данных, которые не основаны на XML.Таким образом, каждый разработчик может выбрать тот способ, который ему более удобен.

interface My_DataConverter_Interface
{
    /**
          * @param string                $file
          * @return My_DataObject
          */
    function import($file);

    /**
          * @param My_DataObject $data
          * @param string                $file
          */
    function export(My_DataObject $data, $file);
}

abstract class My_DataConverter_Xslt implements My_DataConverter_Interface
{ /* ... */ }

class My_DataConverter_XmlFormat1 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_XmlFormat2 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_Csv implements My_DataConverter_Interface
{ /* ... */ }

Другие советы

Я думаю, что ваши рассуждения здравы, и я бы пошел тем же путем.

В основном то, о чем вы говорите, - это классы моста / адаптера / фасада.Они (имхо) более гибкие и понятные, чем шаблоны XSL.

Третья причина на самом деле таковой не является, потому что поддержка XSL включает в себя не что иное, как раскомментирование расширения PHP.

Я также рад видеть, что вы хотите сделать это с помощью расширений DOM (или эквивалентной библиотеки), а не писать XML в виде текста, что создает все проблемы с экранированием и еще много чего, чего вы избежите своим способом.

Лично я также считаю, что шаблоны XSL более хрупки для изменения (в силу того, что они несколько более загадочны для подавляющего большинства программистов), поэтому, если ваш формат надмножества когда-либо изменится (что, давайте посмотрим правде в глаза, так и будет), вам потенциально потребуется изменить все ваши шаблоны.Конечно, возможно, вам придется делать это и с помощью кода, но код, вероятно, будет проще поддерживать.

Интересная проблема.

Однако оба решения будут работать, я думаю, вы это знаете.

Я бы, вероятно, сам выбрал кодированное решение.Но это, вероятно, связано с тем, что XSLT вызывает у меня головную боль.

У XSLT есть преимущество, и оно заключается в том, что вы можете попросить, чтобы они были созданы людьми, предоставляющими вам неизмененный XML..

Если вы всегда будете их создавать, то это, вероятно, не имеет значения, и кодированное решение будет проще поддерживать большую часть времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top