2

我通过 COM 使用 mxsml 6 来执行转换。源样式表有一个我知道如何包含的 xs:import 语句,但我如何告诉 MSXML 这样做呢?我似乎找不到一个地方告诉 IXSLTemplate 加载已解析的源

细节:

  • 我收到错误“系统无法找到指定的对象”
  • 我在源文档上设置 ResolveExternals = true
  • 我正在尝试执行 schematron 验证
  • 我正在使用 Delphi,所以使用 msxml 似乎是我唯一的选择
  • 我在服务器环境中将所有内容都保存在内存中,因此我非常希望避免使用文件

代码:

var
  v: variant;
  doc : IXMLDOMDocument2;
  xform: IXSLTemplate;
begin
  v := CreateOLEObject('MSXML2.FreeThreadedDOMDocument.6.0')
  doc := IUnknown(TVarData(v).VDispatch) as IXMLDomDocument2;
  doc.async := false;
  doc.resolveExternals := true;
  doc.loadXML([my source for the first transform below]);
  v := CreateOLEObject('MSXML2.XSLTemplate.6.0');
  xform := IUnknown(TVarData(v).VDispatch) as IXSLTemplate;
  xform.stylesheet := doc;
end;

转换的原始来源:

4

1 回答 1

0

我不是 delphi 程序员,但我经常使用 C++ for MSXML4 完成此操作。这是 MSXML4 文档中的 vb 代码示例,我只是将其翻译为 C++。

 Dim xslt As New Msxml2.XSLTemplate40
 Dim xslDoc As New Msxml2.FreeThreadedDOMDocument40
 Dim xmlDoc As New Msxml2.DOMDocument40
 Dim xslProc As IXSLProcessor
 xslDoc.async = False
 xslDoc.Load "sample.xsl"
 Set xslt.stylesheet = xslDoc
 xmlDoc.async = False
 xmlDoc.Load "books.xml"
 Set xslProc = xslt.createProcessor()
 xslProc.input = xmlDoc
 xslProc.addParameter "param1", "Hello"
 xslProc.Transform
 MsgBox xslProc.output
于 2013-08-19T21:27:06.147 回答