IXSLTemplate(MSXML 6) - 如何解析xsl:import

时间:2013-06-09 23:56:41

标签: delphi xslt msxml6

我通过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;

变换的原始来源:

1 个答案:

答案 0 :(得分: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