无法在 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);
我需要在 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);