【发布时间】:2023-03-23 09:37:01
【问题描述】:
我有大量手动更新的 XHTML 文件。在更新的审查阶段,我想以编程方式检查文件的格式是否正确。 我目前正在使用 XmlReader,但平均 CPU 所需的时间比我预期的要长得多。
XHTML 文件的大小从 4KB 到 40KB 不等,每个文件的验证需要几秒钟的时间。检查是必不可少的,但我希望尽可能缩短时间,因为在将文件读入下一个流程步骤时执行检查。
是否有更快的方法来进行简单的 XML 格式良好检查?也许使用外部 XML 库?
我可以确认,使用 XmlReader 验证“常规”基于 XML 的内容非常快,并且正如建议的那样,问题似乎与每次验证文件时都会读取 XHTML DTD 的事实有关。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
请注意,除了 DTD 之外,还会下载相应的 .ent 文件(xhtml-lat1.ent、xhtml-symbol.ent、xhtml-special.ent)。
因为完全忽略 DTD 并不是 XHTML 的真正选择,因为格式正确与允许的 HTML 实体密切相关(例如,当我们忽略 DTD 时, 会立即引入验证错误)。
按照建议,使用自定义 XmlResolver 并结合 DTD 和实体文件的本地(嵌入)副本解决了问题。
我会在清理完代码后在这里发布解决方案
【问题讨论】:
-
我遇到了类似的问题。您介意为此发布您的代码解决方案吗?
-
@STLDeveloper 我在以下代码 (VB.NET) 中实现了建议:ValidateXMLClass.vb。所需的 .dtd、.ent 和 .mod 文件(本地)作为嵌入式资源包含以加速验证。代码调用如下:'Dim validateFile As New ValidateXMLClass validateFile.fileIn = tgtFile If Not validateFile.wellFormed Then ...'
-
感谢您在您原来的问题经过这么长时间后提供代码。
标签: c# xml well-formed