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

时间:2018-08-10 15:45:14

标签: c# nunit

我想使用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的情况下更改属性的替代方法?

1 个答案:

答案 0 :(得分:1)

您可以使用XmlReaderSettings控制如何将DTD缓存,解析或用于验证,并且仍然使用XDocument

如果您可以花时间缓存DTD,而更改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还有许多其他特性有时会派上用场。