如何在Delphi应用程序中使用XSLT文档显示XML?

13

我收到了一个示例XML文件(最终我的客户每天都会收到几个这样的文件),以及一个XSLT文件,这个文件似乎可以将XML转换为具有有意义的布局,适合在浏览器中显示或打印。

我想在现有的Delphi应用程序中添加一些内容,使用户可以从驱动器中选择其中一个XML文件并“显示”它(在TWebBrowser或类似控件中)。

我不知道该从哪里开始,搜索delphi、xml和xslt得到的示例似乎都是基于数据模块/数据库的;我只想把给定的XML文件转换成屏幕上的内容。看起来可能涉及PageProducer,但我无法完全理解需要做什么。有人能提供任何指针,或者快速教程的链接吗?

非常感谢!


好的,这引起了一些 Delphi 程序员的兴趣,所以我会在接下来的几天里回来,并发布一个我是如何让它工作的示例(当我做到时)。 :-) - robsoft
Kieveli提供的在文档中添加样式表引用的提示非常有用,因为它在测试和检查时节省了时间。 Ken的提示起到了作用,考虑到他评论中指出的更改。 - robsoft
4个回答

10
Uses
  XMLDoc, XMLIntf;

function Transform(XMLContent : string; XSLContent : string) : WideString;
var
  XML : IXMLDocument;
  XSL : IXMLDocument;
begin

  XML := LoadXMLData(XMLContent);
  XSL := LoadXMLData(XSLContent);

  XML.DocumentElement.TransformNode(XSL.DocumentElement, Result)

end;

无法正确显示代码格式。我正在使用IE 8,也许这就是原因? - Ken Byington
1
在上面的例子中,XMLContent是您将要接收的XML,而XSLContent则是XSLT。我们使用这个来从XML文档模板生成HTML页面。但输出取决于XSLT生成的内容。无需第三方组件。使用默认的Delphi XML解析器。(MSXML) - Ken Byington
只是为了帮助大家:我使用了这个程序,它需要在调用转换函数之前调用CoInitialize(nil),并在之后调用CoUninitialize()以释放内存。要使用这些函数,您需要将ActiveX和Windows添加到uses子句中。 - Jonathan

6

我曾经在Delphi中使用MSXML库进行XSLT转换,那是很久以前的事情了。效果非常好!

我不确定你的XSLT将生成什么输出格式,但了解这一点将有助于你找出如何显示它。我们通过XSLT从XML生成HTML,并在应用程序的一个窗格中使用ActiveX Web浏览器(IE)控件显示它。

这里有一个关于MSSXML和Delphi的链接可能会有所帮助。

顺便说一句:如果这是你第一次使用XSLT,你可以手动编辑一个XML文件,并添加一个指令来让它使用特定的XSLT显示。当你在Firefox中打开编辑后的XML文件时,XSLT将被应用,并显示你的MSXML调用的输出结果。以下是你手动添加到XML中的行:

<?xml-stylesheet type="text/xsl" href="myStyleSheet.xsl"?>

谢谢!按照您的建议编辑XML文档后,外观确实有所改变,但显然没有正确使用XSLT文档中的信息;我想知道它们是否真的匹配,因此转换无法正常工作,因为未找到XSLT引用的实体。我将回到客户那里,并请求更多帮助。不过,感谢您的起点启动,真的非常感谢。 - robsoft
不是的,当您以这种方式应用样式表并通过Firefox显示它时,使用的是TransformiiX处理器,而不是MSXML。 - Abel

2
如果你只需要进行转换,可以使用 TXMLDocument,将其保存到磁盘上,然后通过 Navigate('file:///...')TWebBrowser 中显示结果。

个人经验来看,我在使用 MSXML 时遇到了一些问题,所以开始使用 DIXML


+1 对于 DIXML 链接,看起来非常有用。我还没有完全探索这个问题,但我希望我可以只用几个标准组件做些简单的事情 - 所以感谢您的建议! - robsoft

1

您可以尝试安装AltovaXML,它可以作为COM+被调用。它是免费的,并且可以从以下链接下载:http://www.altova.com/altovaxml.html

MsXml只能使用xslt 1.0,但AltovaXml可以使用xslt 2.0。


更名为RaptorXML并且不免费,就我所见(他们可能隐藏得很好,或者只有试用版本可用)。 - ciuly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接