【问题标题】:Can't set settings on XmlTextReader?无法在 XmlTextReader 上设置设置?
【发布时间】:2015-06-05 06:57:36
【问题描述】:

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

Settings 属性是只读的,所以它不能被设置并且它为空?这应该如何工作?

【问题讨论】:

标签: c# .net xml xmldocument xmlreader


【解决方案1】:

您应该首先在构造XmlReader 实例时传递XmlReaderSettings 实例,而不是稍后更新读者的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);

【讨论】:

    【解决方案2】:

    您应该改用XmlReader.Create(string, XmlReaderSettings) 来创建您的阅读器实例。

    来自MSDN 参考:

    从 .NET Framework 2.0 开始,我们建议您使用 改为 System.Xml.XmlReader 类。

    想法是使用基类XmlReader的Create(...)工厂方法,而不是直接实例化派生类。另请参阅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);
    

    【讨论】:

    • @Banshee 更新了我的分析器以包含该部分,但您无需更改任何内容..
    • XmlValidatingReader 自 .NET Framework 2.0 起已过时。
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2017-08-14
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多