2

我的 PHP 应用程序需要能够导出(和导入)一系列不同的数据格式,主要是基于 XML 的。

我可以选择

  • 在 PHP 中,使用 DOM 导出到某种基于 XML 的格式,该格式是其他人所需的所有数据的超集,并为我想要支持的每种输出格式创建一个单独的 XSLT 样式表,通过 PHP 的 XSL 扩展运行 DOM 输出。

或者

  • 不使用 PHP 的 XSL 扩展,而是将每个输出格式实现为原生 PHP 中的一个类,该类使用 DOM 直接从内部对象/结构转换为给定的 XML 格式,每个这样的类都实现相同的接口,因此它们是可互换的。

该应用程序将被大学使用,它是一种以各种方式管理“人员”记录的工具,以及从各种来源(如他们的人力资源系统等)进行导入/导出的工具。我将自己实现一组输入和输出格式,但是将来,使用它的人可能会想要修改它以支持他们自己的格式。

我考虑不使用 XSLT 的一个原因是,如果将来除了我之外还有其他人要维护该应用程序,那么似乎很少有人知道 XSLT——似乎有更多人知道 PHP。

另一个是第二个似乎是一个更有效和“程序化”的解决方案,并且在某种意义上更灵活,因为我可以通过重载像 CSV 或基于列的文本一样轻松地输出和导入非 XML 格式类的必要部分,而不是经常需要的部分。

第三个但非常小且无关紧要的原因是 PHP 需要重新编译才能启用 XSL,而 DOM 默认情况下是启用的,因此它的可移植性会更高一些。然而,这并不是什么大问题,因为它很容易重新配置 PHP。

你觉得我的推理怎么样?

4

3 回答 3

4

我个人的意见是,您的决定应该强烈地基于您如何判断目标受众的 XSLT 知识这一事实。如果很明显 XSLT 在必须使用该系统的人(包括您自己)中以某种方式是“未知领域”,那么您可以排除 XSLT 解决方案。学习 XSLT 的需要和努力将抵消您将从 XSLT 解决方案中获得的优势(非常优雅 - 尤其是在将 XML 转换为 XML 时,不需要弄乱 PHP 代码,不需要 PHP 知识)。

也许双向解决方案可能是正确的选择。您可以构建一个用于导入和导出的适配器系统,该系统将 XSLT 用于 XML 数据格式,并提供对所有不基于 XML 的数据格式使用 PHP 代码的能力。这样每个开发人员都可以选择他更喜欢的方式。

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
{ /* ... */ }
于 2009-05-04T07:08:18.513 回答
3

我认为你的推理是合理的,这也是我会走的路。

基本上你在谈论的是桥接/适配器/外观类。它们(恕我直言)比 XSL 模板更灵活、更容易理解。

第三个原因并不是真正的原因,因为 XSL 支持只涉及取消注释 PHP 扩展。

我也很高兴看到您希望通过 DOM 扩展(或等效库)来执行此操作,而不是将 XML 编写为文本,这会引入所有转义问题以及诸如此类的东西,您将避免使用自己的方式。

就我个人而言,我还认为 XSL 模板更容易更改(因为它们对绝大多数程序员来说有点神秘)所以如果你的超集格式发生变化(让我们面对现实,它会改变)你可能需要更改所有模板。当然,您可能也必须使用代码来执行此操作,但代码可能更易于维护。

于 2009-05-04T03:34:49.773 回答
2

有趣的问题。

两种解决方案都可以,但我想你知道这一点。

我可能会自己使用编码解决方案。但这可能与让我头疼的 XSLT 有关。

XSLT 有一个好处,那就是您可以要求他们由为您提供未更改 XML 的人生成。

如果你总是要生产它们,那么它可能并不重要,编码解决方案在大多数情况下会更容易维护。

于 2009-05-04T03:51:24.400 回答