17370845950

Delphi/Lazarus怎么操作XML
Delphi和Lazarus均支持XML解析与生成:Delphi用TXMLDocument和IXML接口,Lazarus用XMLRead/XMLWrite及DOM;DOM适合小数据随机访问,SAX适合大数据流式处理;需注意编码统一(推荐UTF-8)和节点生命周期管理。

Delphi 和 Lazarus 都支持 XML 解析与生成,但方式略有不同:Delphi 自带 TXMLDocument(基于 MSXML 或 OpenXML)、IXMLxxx 接口体系;Lazarus 主要靠 XMLRead / XMLWrite 单元 + TXMLParser / TXMLWriter,也支持 DOM 模式(需启用 dom 单元)。

读取 XML 文件(DOM 方式,跨平台推荐)

适合结构清晰、数据量不大的场景,可随机访问节点。

  • Delphi:用 TXMLDocument(记得设置 Owner = True,并调用 LoadFromFile);启用 DOMVendor(如 'MSXML''OpenXML'
  • Lazarus:引入 domxmlread,用 XMLRead 函数加载为 IDOMDocument;示例:
    Doc := XMLRead('config.xml');
    然后用 Doc.DocumentElement 开始遍历子节点
  • 通用技巧:用 GetElementsByTagName('xxx') 快速获取同名元素;用 Node.Attributes['attrname'] 读属性

写入 XML 文件(手动构造或 DOM 生成)

避免字符串拼接,优先用 DOM 构建保证格式正确。

  • Delphi:创建 TXMLDocumentCreateElementAppendChild → 最后 SaveToFile
  • Lazarus:用 dom 单元创建 IDOMImplementationCreateDocument → 添加元素和文本节点;保存用 XMLWrite 函数输出到文件或流
  • 注意:中文内容要确保编码一致(建议 UTF-8),Lazarus 中可设 Doc.SetXmlVersion('1.0'); Doc.SetXmlEncoding('UTF-8');

轻量解析(SAX/事件式,适合大文件)

不载入整个文档,边读边处理,内存占用低。

  • Delphi:可用 TXMLParser(在 XMLParser 单元),重写 OnStartElement / OnEndElement 等事件
  • Lazarus:用 TXMLParserxmlparser 单元),设置 OnStartElement 回调,在里面判断标签名并提取属性或文本
  • 关键点:文本内容在 OnCharacterData 中获取,且可能分多次回调,需累积字符串

实用小贴士

  • 路径查找别硬写:Delphi 可用 SelectNodes('//item[@active="1"]')(XPath,需 MSXML 支持);Lazarus 需第三方库(如 lazxml)或手动遍历
  • Lazarus 默认不带完整 DOM 写支持,若 XMLWrite 输出无缩进,可手动加换行和空格,或用 laz2_xml 中的美化函数
  • 调试时用 Node.XML(Delphi)或 Node.NodeValue + Node.TextContent(Lazarus DOM)快速查*段

基本上就这些。选 DOM 还是 SAX,看数据大小和访问模式;跨平台项目优先用 Lazarus 的 dom+xmlread 组合,Delphi 项目可直接上 TXMLDocument。不复杂但容易忽略编码和节点生命周期管理。