我是一个库,它有一个从提供的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?
答案 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的评论)