2

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

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

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

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

非常感谢您的帮助:-)

4

2 回答 2

3

看来您应该使用CoDOMDocument60而不是CoDOMDocument40

MaxElementDepth 属性

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

于 2012-11-26T16:25:54.863 回答
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,您就可以根据需要自定义其属性和设置。

于 2012-11-26T21:46:52.210 回答