我可以更改XmlReader.Settings吗?

时间:2017-02-16 15:58:02

标签: c# xml

我是一个库,它有一个从提供的XmlReader解析XML的方法。所以,调用者传递给我XmlReader实例(或任何派生类的实例),但我需要确保忽略空格。即我想这样做:

xmlReader.Settings.IgnoreWhitespace = true;
// Then do my parsing
// Finally, revert to whatever state xmlReader.Settings had prior to calling my method

但是,如果调用者在创建XmlReader实例时没有实例化XmlReaderSettings,我也不知道如何自行解决这个问题。

例如,如果调用者使用了此代码:

XmlReader reader = new XmlTextReader(File.OpenRead("file.xml"));

reader.Settings将保持为null。此属性是只读的,因此我无法分配它。

我不对来电者负责,我也没有强迫他们使用这种或那种方式来获取XmlReader实例并对其进行配置。我知道XmlTextReader已被弃用,但它仍然可以在.NET 4.6中使用,人们可以使用它。

这是否意味着在我的库中没有办法解决这个问题,而且调用者必须为我提供已经配置良好的XmlReader?

1 个答案:

答案 0 :(得分:1)

您可以使用XmlReader.Create()

将提供的XmlReader打包成新的public void ReadMyXml(XmlReader reader) { XmlReaderSettings settings = reader.Settings ?? new XmlReaderSettings(); settings.IgnoreWhitespace = true; settings.CloseInput = false; using(XmlReader myReader = XmlReader.Create(reader, settings)) { // use myReader to read the xml } }
settings.CloseInput = false

如果您想避免在最后关闭原始阅读器,请设置<a href=''>Hello how are you</a>(感谢Jon Hanna的评论)