快速XML(SVG)读取?

时间:2015-07-04 22:53:23

标签: c# xml unity3d xml-parsing

我有一个XML(实际上是一个SVG)文件,4000行,大约700个单独节点,每个节点都有一个重要属性。

我想预加载数据,并用数据填充实际的C#运行时模型图(一些字符串拆分和属性设置)。

我是使用XmlDocument完成的,此过程花了 12秒(在Unity编辑器播放模式下)。

我开始使用XmlReader实施,只是在 6秒(没有任何处理,只有ReadMoveToNextAttribute来电)的情况下迭代文件。

有没有办法更快地阅读文件错误?

6-8秒的发布时间是我无法接受的。整个过程最多只需要半秒钟。

2 个答案:

答案 0 :(得分:2)

我只是从文件中删除了DOCTYPE定义。

即使使用原始XmlDocument实施,提升8倍性能。

<!-- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -->

答案 1 :(得分:1)

或者,您可以使用settings参数绕过DTD验证:

// Files with a <!DOCTYPE ...> get parsed with a super expensive validation; ignore it.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.None;
settings.XmlResolver = null;
settings.DtdProcessing = DtdProcessing.Ignore;

XmlReader reader = XmlReader.Create(filePath, settings);
XmlDocument doc = new XmlDocument();
doc.Load(reader);