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

时间:2012-11-26 15:10:15

标签: delphi msxml

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

有没有人知道如何在正在运行的程序中将MSXML中的MaxElementDepth值设置得更高,这样我才能读入SVG文件?

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

我能想到的其他选择是运行命令行工具来压缩层次结构,但我宁愿不这样做......

非常感谢您的帮助: - )

2 个答案:

答案 0 :(得分:3)

您似乎应该使用CoDOMDocument60代替CoDOMDocument40

MaxElementDepth Property

  

MSXML 3.0和6.0支持此属性。默认值为   0表示3.0。对于6.0,默认值为256。

答案 1 :(得分:2)

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

uses
  ..., Xml.Win.msxmldom;

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

initialization
  MSXMLDOMDocumentCreate := MyCreateDOMDocument;

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

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,您就可以根据需要自定义其属性和设置。