我有一个SVG文件,由于某种原因,它有超过256个深度嵌套元素,这阻止了Delphi加载SVG文件,因为它违反了MSXML的MaxElementDepth约束(默认为256)。
有没有人知道如何在正在运行的程序中将MSXML中的MaxElementDepth值设置得更高,这样我才能读入SVG文件?
我尝试了另一种CoDOMDocument40,它有一个方法(setProperty)来设置属性,但是当我尝试设置MaxElementDepth时它会报告Invalid属性名称。
我能想到的其他选择是运行命令行工具来压缩层次结构,但我宁愿不这样做......
非常感谢您的帮助: - )
答案 0 :(得分:3)
您似乎应该使用CoDOMDocument60
代替CoDOMDocument40
:
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
,您就可以根据需要自定义其属性和设置。