You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11 FMX安卓端XML转XSLT报错,求助切换DOM供应商及解决方法

Delphi 11 FMX 安卓平台XML XSLT转换问题解决

一、切换DOM供应商解决TransformNode不支持问题

安卓平台默认使用的Ommi XML DOM供应商不支持TransformNode方法,你可以切换到ADOM(Delphi自带的跨平台DOM供应商)来实现转换:

代码示例

uses Xml.XmlIntf, Xml.Doc, Xml.AdomXmlDom;

procedure TForm2.BtnTransformXML(Sender: TObject);
var
  XML : IXMLDocument;
  XSL : IXMLDocument;
  XMLOutput : WideString;
  TransformNodeIntf: IDOMNodeTransform;
begin
  // 初始化XML文档并指定ADOM供应商
  XML := TXMLDocument.Create(nil);
  XML.DOMVendor := GetDOMVendor('ADOM');
  XML.LoadFromXML(ReadTextFile(FXML_File));
  
  // 初始化XSL文档并指定ADOM供应商
  XSL := TXMLDocument.Create(nil);
  XSL.DOMVendor := GetDOMVendor('ADOM');
  XSL.LoadFromXML(ReadTextFile(FXSLT_File));
  
  // 检查并调用转换接口
  if Supports(XML.DocumentElement, IDOMNodeTransform, TransformNodeIntf) then
    TransformNodeIntf.TransformNode(XSL.DocumentElement as IDOMNode, XMLOutput)
  else
    raise Exception.Create('当前DOM供应商不支持XSLT转换');
    
  Memo1.Text := XMLOutput;
end;

注意:确保项目中已引用Xml.AdomXmlDom单元,ADOM是Delphi原生支持的跨平台DOM实现,完全兼容XSLT转换逻辑。

二、使用TXMLTransform组件(更简洁的跨平台方案)

Delphi自带的TXMLTransform组件封装了跨平台的XSLT转换逻辑,无需手动切换DOM供应商,更适合FMX跨平台开发:

代码示例

uses Xml.XmlIntf, Xml.Doc, Xml.Transform, System.Classes;

procedure TForm2.BtnTransformXML(Sender: TObject);
var
  XMLDoc, XSLDoc: TXMLDocument;
  OutputStream: TStringStream;
begin
  XMLDoc := TXMLDocument.Create(nil);
  try
    XMLDoc.LoadFromFile(FXML_File);
    XMLDoc.Options := XMLDoc.Options + [doNodeAutoIndent];
    
    XSLDoc := TXMLDocument.Create(nil);
    try
      XSLDoc.LoadFromFile(FXSLT_File);
      
      // 配置XMLTransform组件
      XMLTransform1.XMLSource := XMLDoc;
      XMLTransform1.XSLSource := XSLDoc;
      
      // 转换到字符串流并输出到Memo
      OutputStream := TStringStream.Create('', TEncoding.UTF8);
      try
        XMLTransform1.TransformToStream(OutputStream);
        OutputStream.Position := 0;
        Memo1.Text := OutputStream.ReadString(OutputStream.Size);
      finally
        OutputStream.Free;
      end;
    finally
      XSLDoc.Free;
    end;
  finally
    XMLDoc.Free;
  end;
end;

使用步骤

  1. 在FMX窗体的「XML」组件面板中添加TXMLTransform组件;
  2. 直接使用上述代码加载XML和XSL文件并执行转换即可。

内容的提问来源于stack exchange,提问作者Pedro Luque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:23:15