XDocument和XmlDocument的替代方法用于在C#中加载xml文件?



我想使用 C# 更改 xml 文件中的属性。

下面是一个示例 XML 文件

<?xml version="1.0" encoding="us-ascii"?>
<Client>
<Age>25</Age>
<Weight>50</Weight>
</Client>

我尝试使用XmlDocumentXDocument加载 xml 文件。它们都需要很多时间(超过 5 分钟(来加载。

这是我用来加载文件的代码:

string filePath = @"myFile.xml";
XmlDocument xmlData = new XmlDocument();

根据Google的说法,问题是XDocumentXmlDocument将加载XML文件的所有DTD,这就是为什么需要很多时间的原因。有解决方法吗?或者也许有任何允许我在不加载所有 DtD 的情况下更改属性的替代方案?

您可以使用 XmlReaderSettings 控制 DTD 的缓存、分析或用于验证的方式,并且仍然可以使用 XDocument。

如果您可以花时间缓存 DTD,并且更改它们不是测试的一部分,则可以接受一次打击并缓存它们。

如果时间太长,或者它们不可用,并且测试不需要它们,则可以跳过 DTD 处理。

using (var reader = XmlReader.Create(_, 
new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Ignore,
ValidationType = ValidationType.None,
//DtdProcessing = DtdProcessing.Parse,
//ValidationType = ValidationType.DTD,
XmlResolver = new XmlUrlResolver
{
CachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable),
//CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore),
}
}))
{
var doc = XDocument.Load(reader);
//…
}

XmlReaderSettings 还有许多其他属性,有时会派上用场。

最新更新