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
,就可以根据需要自定义其属性和设置。
上一篇: Delphi XE3, How to set MSXML MaxElementDepth to allow reading deep XML documents