XmlWriter设置OutputMethod为Html时异步操作失败问题
问题产生原因
当XmlWriterSettings.OutputMethod设置为OutputMethod.Html时,XmlWriter.Create返回的写入器实例,其底层使用的XmlWellFormedWriter并未针对Html输出场景实现异步写入的相关重载方法,直接继承了XmlWriter基类的默认异步实现,而基类的异步方法默认逻辑就是抛出NotImplementedException。
而默认OutputMethod.AutoDetect模式下,底层写入器走的是标准Xml异步写入的实现路径,所有异步方法都有完整的具体实现,所以可以正常运行。即使外层都包装了XmlAsyncCheckWriter,内层实际写入器的实现差异才是报错的根本原因。
可行解决方案
- 若输出场景不需要严格的Html格式特殊适配(如自动处理Html自闭合标签、doctype特殊规则等),可显式将
settings.OutputMethod修改为OutputMethod.Xml,即可正常使用异步写入方法。 - 若必须使用Html输出模式,可暂时改用同步写入方法:将所有
*Async后缀的异步写入方法替换为对应的同步版本(如WriteStartElementAsync替换为WriteStartElement),Html模式下XmlWriter的同步方法实现是完整的,不会抛出异常。 - 若同时需要Html输出和异步能力,可先按Xml模式异步写入到中间内存流,再将生成的Xml内容转换为符合要求的Html格式,也可引入第三方Html处理库完成异步写入逻辑。
内容的提问来源于stack exchange,提问作者Eric Patrick
相关产品推荐
相关产品推荐

