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

时间:2015-04-16 20:22:58

标签: xml delphi xslt c++builder

我想知道是否有一种方法可以在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。这工作正常,但我想删除对外部文件集的依赖,在最好的情况下,它位于我的应用程序文件夹的某个地方,或者,在通常情况下,驻留在第三方Web服务器上,具有关联风险(无法连接,缓慢等)。

XSLT文件与其他XSLT有内部依赖关系,因此我无法将此文件打包到资源中并在运行时加载它(可以吗?如果可能的话,我想知道如何,因为那也是我问题的有效解决方案)。作为参考,这是"主要" XSLT:

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

  1. 由于此XSLT具有外部依赖性,因此首先需要删除它们。为此,我按照这个问题的答案:Merge multiple xslt stylesheets
  2. 使用RC文件将独立的XSLT文件放入资源中。
  3. 使用TResourceStream
  4. 加载资源
  5. 使用LoadFromFile,而不是使用LoadFromStream将XSLT加载到XML中,使用import random x = int(raw_input("Number: ")) y = random.randint(1,6) while x == y: y=random.randint(1,6) ,使用上一步中创建的资源流。
  6. 这解决了主要问题:删除外部文件(本地或远程)的依赖项。如果对原始XSLT文件集进行更改,则需要重新创建独立的XSLT和资源。