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

RAD Studio中如何避免XML注释被解析为节点?

在RAD Studio 10.2.3和11.3中避免XML注释被视为有效节点的方法

你遇到的问题是TXmlDocument默认会将XML注释解析为节点,导致统计子节点时包含注释。以下两种方法可以解决这个问题:

方法1:加载时配置DOM忽略注释

Windows平台下TXmlDocument默认使用MSXML解析器,可通过设置DOM对象的preserveComments属性为False,让解析器加载时直接忽略注释节点:

XmlDoc := TXmlDocument.Create(nil);
try
  // 先创建并配置MSXML DOM对象
  var DOM: IXMLDOMDocument2;
  DOM := CoDOMDocument60.Create;
  DOM.preserveComments := False; // 禁用注释保留
  XmlDoc.DOMDocument := DOM;
  
  XmlDoc.LoadFromFile('C:\test.xml');
  msgNode := XMLDoc.ChildNodes.FindNode('Message');

  NofChildren := 0;
  for i := 0 to msgNode.ChildNodes.Count-1 do begin
    Inc(NofChildren);
    tmpNode := msgNode.ChildNodes[i];
  end;
  // 此时NofChildren会是1,仅统计<id>节点
finally
  XmlDoc.Free;
end;

注意:该方法仅适用于Windows平台的MSXML解析器,跨平台项目不推荐使用。

方法2:遍历节点时过滤注释类型

不管使用哪种解析器(Windows/MSXML、跨平台/LibXML2),都可以通过判断节点类型跳过注释节点。XML注释对应的节点类型是ntComment:

XmlDoc := TXmlDocument.Create(nil);
try
  XmlDoc.LoadFromFile('C:\test.xml');
  msgNode := XMLDoc.ChildNodes.FindNode('Message');

  NofChildren := 0;
  for i := 0 to msgNode.ChildNodes.Count-1 do begin
    tmpNode := msgNode.ChildNodes[i];
    // 仅统计非注释类型的节点
    if tmpNode.NodeType <> ntComment then begin
      Inc(NofChildren);
    end;
  end;
  // 此时NofChildren会是1,注释节点被跳过
finally
  XmlDoc.Free;
end;

这种方法通用性更强,适合所有平台的RAD Studio项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:55:11