我可以更改XmlReader.Settings吗?
问题描述:
我是一个库,它有一个从提供的XmlReader中解析XML的方法。所以,调用者向我传递了XmlReader实例(或任何派生类的实例),但我需要确保忽略空白。即我想这样做:我可以更改XmlReader.Settings吗?
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将保持为空。此属性是只读的,因此我无法分配它。
我对调用者不负责,我不强迫他们使用这种或那种获取XmlReader实例的方式并对其进行配置。我知道XmlTextReader已被弃用,但它仍然可以在.NET 4.6中使用,并且人们可以使用它。
这是否意味着我的库中没有办法解决这个问题,并且它的调用者必须为我提供已配置好的XmlReader?
答
你可以用提供的XmlReader
到使用XmlReader.Create()
一个新问题:
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
如果你想避免在年底关闭原始读卡器(感谢乔恩·汉纳的评论)
'settings.CloseInput'应该控制最后一个方面。 –
@JonHanna thx,不知道。我会添加它。 –
谢谢。但是,在我的测试'settings.CloseInput = false'没有任何效果。在'使用'作用域结束后,reader.ReadState立即变为关闭状态。 – Alex