【问题标题】:How do I display XML using an XSLT document, in a Delphi app?如何在 Delphi 应用程序中使用 XSLT 文档显示 XML?
【发布时间】:2009-06-11 18:06:05
【问题描述】:

我收到了一个示例 XML 文件(最终我的客户每天都会收到其中几个)和一个 XSLT 文件,该文件显然会将 XML 转换为具有有意义布局的东西,适合在浏览器中显示或打印.

我想在现有的旧版 Delphi 应用程序中添加一些东西,这样用户就可以从驱动器中选择一个 XML 文件并“显示”它(在 TWebBrowser 或类似设备中)。

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

非常感谢!

【问题讨论】:

  • 好的,这引起了一些 Delphi 程序员同事的兴趣,所以我会在接下来的几天里回到这里,并发布一个我如何让它工作的例子(当我愿意)。 :-)
  • Kieveli 关于在文档中添加样式表引用的提示非常有用,因为它节省了测试和检查的时间。考虑到他的 cmets 中注意到的变化,Ken 的提示起到了作用。

标签: xml delphi xslt


【解决方案1】:
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。也许这就是原因?
  • 在上面的示例中,XMLContent 是您将要接收的 XML,XSLContent 是 XSLT。我们使用它从 XML 文档模板生成 HTML 页面。但输出是 XSLT 生成的任何内容。无需第三方组件。使用默认的 Delphi XML 解析器。 (MSXML)
  • 只是为了帮助任何人:我使用了这个,它需要我在调用转换函数之前调用 CoInitialize(nil) 并调用 CoUnInitialize();之后释放内存。要使用这些功能,您需要在 uses 子句中添加 ActiveX 和 Windows。
【解决方案2】:

我使用 MSXML 库在 Delphi 中进行 XSLT 转换。那是很久以前。像魅力一样工作!

我不确定您的 XSLT 会生成什么输出格式,但知道这将帮助您弄清楚如何显示它。我们通过 XSLT 从 XML 生成 HTML,并使用 ActiveX Web Browser (IE) 控件在应用程序的窗格上显示它。

这里有一个link on MSSXML and Delphi 可能会有所帮助。

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

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

【讨论】:

  • 谢谢!当我按照您的建议编辑 XML 文档时,外观确实发生了变化,但显然没有正确使用 XSLT 文档中的信息;我想知道它们是否真的不匹配,因此转换不起作用,因为它没有找到 XSLT 引用的实体。我会回到客户那里寻求更多帮助。谢谢你让我开始,真的很感激。
  • "它会告诉你 MSXML 调用的输出是什么" >> 不,当你以这种方式应用样式表并通过 Firefox 显示它时,使用TransformiiX 处理器,而不是MSXML。
【解决方案3】:

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

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

【讨论】:

  • +1 表示 DIXML 链接,看起来非常有用。我还没有正确探索这个问题,但我希望我可以用几个标准组件做一些简单的事情 - 所以感谢你的建议!
【解决方案4】:

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

MsXml 只能与 xslt 1.0 一起使用,但 AltovaXml 可以与 xslt 2.0 一起使用

【讨论】:

  • 改名为 RaptorXML 而不是免费的,据我所知(要么他们隐藏得很好,要么只有试用版下载)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多