Delphi XE3,如何设置MSXML MaxElementDepth以允许读取深层XML文档

我有一个SVG文件,由于某种原因,它有超过256个深度嵌套元素,并且阻止了Delphi加载SVG文件,因为它违反了MSXML的MaxElementDepth约束(默认值为256)。

有谁知道在运行程序中将MSXML中MaxElementDepth值设置得更高的方法,以便我可以读取SVG文件?

我尝试了另一种CoDOMDocument40,它有一个方法(setProperty)来设置属性,但是当我尝试设置MaxElementDepth时,它会报告无效的属性名称。

我能想到的其他替代方法是运行命令行工具来扁平化层次结构,但我宁愿不这样去......

非常感谢您的帮助:-)


看起来你应该使用CoDOMDocument60而不是CoDOMDocument40

MaxElementDepth属性

此属性在MSXML 3.0和6.0中受支持。 3.0的默认值为0。 6.0的默认值是256。


在XE2中,实现一个自定义函数并将其分配给Xml.Win.msxmldom单元中的全局MSXMLDOMDocumentCreate变量:

uses
  ..., Xml.Win.msxmldom;

function MyCreateDOMDocument: IXMLDOMDocument;
begin
  Result := CreateDOMDocument;
  //...
end;

initialization
  MSXMLDOMDocumentCreate := MyCreateDOMDocument;

在XE3中,从TMSXMLDOMDocumentFactory派生一个新类并覆盖其虚拟CreateDOMDocument()方法,然后将您的自定义类分配给Xml.Win.msxmldom单元中的全局TMSXMLDOMDocumentFactoryClass变量:

uses
  ..., Xml.Win.msxmldom;

type
  MyFactory = class(TMSXMLDOMDocumentFactory)
  public
    class function CreateDOMDocument: IXMLDOMDocument; override;
  end;

class function MyFactory.CreateDOMDocument: IXMLDOMDocument;
begin
  Result := inherited CreateDOMDocument;
  //...
end;

initialization
  TMSXMLDOMDocumentFactoryClass := MyFactory;

无论哪种情况,只要您有权访问IXMLDOMDocument ,就可以根据需要自定义其属性和设置。

链接地址: http://www.djcxy.com/p/91093.html

上一篇: Delphi XE3, How to set MSXML MaxElementDepth to allow reading deep XML documents

下一篇: Delphi XML traversing