有没有办法为 Delphi 应用程序创建预编译的 XSLT 转换,就像您可以为 .NET 应用程序一样?

Is there a way to create a precompiled XSLT transformation for a Delphi app, like you can for a .NET app?

我想知道是否有一种方法可以创建用于 Delphi/C++Builder 的预编译 XLST 转换,就像您可以使用 xsltc.exe 实用程序在 .NET 中生成的那样,用于示例:

http://my-tech-talk.blogspot.mx/2009/03/using-precompiled-xslt-in-net.html

现在我正在将 XSLT 加载到 _di_IXMLDocument,然后使用该实例调用 DocumentElement->TransformNode 来转换我的原始 XML。这工作正常,但我想删除对外部文件集的依赖,在最好的情况下,这些文件位于我的应用程序文件夹中的某个位置,或者在通常情况下,位于第 3 方 Web 服务器上,以及相关联的风险(无法连接、缓慢等)。

XSLT 文件对其他 XSLT 有内部依赖性,所以我不能只将这个文件打包到资源中并在运行时加载它(可以吗?如果可能的话,我想知道怎么做,因为那样也会是我的问题的有效解决方案)。作为参考,这是 "main" XSLT:

http://www.sat.gob.mx/sitio_internet/cfd/3/cadenaoriginal_3_2/cadenaoriginal_3_2.xslt

谢谢

使用资源文件(如 @MartinHonnen 所建议的那样,允许删除外部依赖项,尽管该过程仍然像外部文件一样完成,即 XSLT 未预编译。

这是我解决这个问题所遵循的步骤:

  1. 由于此 XSLT 具有外部依赖项,因此需要先将其删除。为此,我遵循了这个问题的答案:Merge multiple xslt stylesheets
  2. 使用 RC 文件将独立的 XSLT 文件放入资源中。
  3. 使用 TResourceStream
  4. 加载资源
  5. 不要使用 LoadFromFile 将 XSLT 加载到 XML 中来执行转换,而是使用 LoadFromStream,使用在上一步中创建的资源流。

这解决了主要问题:删除对本地或远程外部文件的依赖。如果原始 XSLT 文件集发生更改,则需要重新创建独立的 XSLT 和资源。