我想使用C#更改xml文件中的属性。
这是示例XML文件
<?xml version="1.0" encoding="us-ascii"?>
<Client>
<Age>25</Age>
<Weight>50</Weight>
</Client>
我尝试同时使用XmlDocument
和XDocument
加载xml文件。他们俩都花了太多时间(超过5分钟)。
这是我用来加载文件的代码:
string filePath = @"myFile.xml";
XmlDocument xmlData = new XmlDocument();
对于Google而言,问题在于XDocument
和XmlDocument
将加载XML文件的所有DTD,这就是为什么要花费很多时间的原因。有没有解决方法?还是任何允许我在不加载所有DtD的情况下更改属性的替代方法?
答案 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还有许多其他特性有时会派上用场。