无法在 XmlTextReader 上进行设置?

Can't set settings on XmlTextReader?

我需要在 XmlTextReader 上设置 MaxCharactersFromEntities,这是我目前的代码:

xmlDocument = new XmlDocument();

xmlTextReader = new XmlTextReader(fileInfo.FullName);
xmlTextReader.Settings = new XmlReaderSettings();
xmlTextReader.Settings.MaxCharactersFromEntities = 0;
var vr = new XmlValidatingReader(xmlTextReader);
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

xmlDocument.Load(vr);

设置 属性 是只读的,因此无法设置且为空?这应该如何工作?

您应该使用 XmlReader.Create(string, XmlReaderSettings) 来创建您的 reader 实例。

来自 MSDN 参考:

Starting with the .NET Framework 2.0, we recommend that you use the System.Xml.XmlReader class instead.

想法是使用基 class XmlReader 的 Create(...) 工厂方法,而不是直接实例化派生的 class。另请参阅 factory method pattern 了解更多信息。

您的其余代码不受影响,因为 XmlValidatingReader 在构造函数中采用 XmlReader

所以你应该得到这样的结果:

xmlDocument = new XmlDocument();

XmlReaderSettings settings = new XmlReaderSettings();
settings.MaxCharactersFromEntities = 0;
XmlReader reader = XmlReader.Create(fileInfo.FullName, settings);

var vr = new XmlValidatingReader(reader);
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

xmlDocument.Load(vr);

你应该首先在构造 XmlReader 实例时传递 XmlReaderSettings 实例,而不是更新 reader 的 Settings 属性 后来 - 这是不可能的,因为 属性 没有 setter- :

var xmlDocument = new XmlDocument();

//create XmlReaderSettings first
var settings = new XmlReaderSettings();
settings.MaxCharactersFromEntities = 80; //0 doesn't make sense here, as it's the default value

//create XmlReader later, passing the pre-defined settings
var xmlReader = XmlReader.Create(fileInfo.FullName, settings);

//the rest of the codes remain untouched
var vr = new XmlValidatingReader(xmlReader);
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

xmlDocument.Load(vr);