2

COM 経由で mxsml 6 を使用して変換を実行しています。ソース スタイルシートには xs:import ステートメントがあり、それを含める方法はわかっていますが、MSXML にそのように指示するにはどうすればよいでしょうか? IXSLTemplate に解決済みのソースをロードするように指示する場所が見つからないようです

詳細:

  • 「指定されたオブジェクトが見つかりません」というエラーが表示されます
  • ソース ドキュメントで ResolveExternals = true を設定しています
  • スキーマトロン検証を実行しようとしています
  • 私は 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 に答える