如何打开/关闭XmlWriter Indent属性?

时间:2013-10-23 11:21:52

标签: c# .net vb.net xmlwriter xmltextwriter

我想在需要时打开/关闭Indent的{​​{1}}属性,以便能够使用此格式进行编写:

XmlWriter

问题是我不知道如何修改属性,我已经读过其他SO问题,不可能多次设置此属性......但是......如果使用{{1}而不是<?xml version="1.0" encoding="Windows-1252"?> <Songs> <Song><Name>My Song 1.mp3</Name><Year>2007</Year></Song> <Song><Name>My Song 2.mp3</Name><Year>2009</Year></Song> <Song><Name>My Song 3.mp3</Name><Year>2008</Year></Song> </Songs> 我可以随时打开/关闭缩进,并注意到XmlTextWriter来自Framework 2.0所以我无法相信没有办法修改Indent属性,因为类XmlWriterXmlTextWriter更新。

我不会使用XmlWriter而不是XmlTextWriter,因为XmlTextWriter在未来几天可能会完全过时,我会使用Framework当前类的逻辑而不是将我的代码基于旧类。

此外,我不会做一些棘手的事情,例如“使用WriteString方法禁用Indent和wrtie换行符”,因为这会在某些行中引发异常。

为了澄清,我只是打开/关闭XmlWriter的缩进属性或者一个开放的工作方式来随时打开/关闭缩进,但不是我不会做的任何其他事情做。

这是Code,它在我尝试修改Indent属性时抛出一个异常,说它只是read属性,但就像我说的那样,我可以在XmlWriter中这样做...所以...看起来太奇怪了。

XmlWriter

2 个答案:

答案 0 :(得分:1)

您无法设置XmlWriter的缩进设置。但您可以将xmlSetting对象传递给Write_SongInfo_Node过程并设置xmlSetting .Indent = True or False 希望它有效。

此致

答案 1 :(得分:1)

XmlWriterSettings 在您创建编写器实例时立即应用于整个编写器,而不是切换到只读模式。只有一种方法可以关闭此模式 - 使用 XmlWriterSettings.Reset()方法,但我不确定它是否可以帮助您。 XmlTextWriter 有缩进的格式选项,并在每个元素写入步骤中检查它们。换句话说, XmlTextWriter 使用自己的函数写入缩进,并且不使用xmlwriter缩进属性。 因此,只有一个工作决策 - 为元素编写实现自定义逻辑,您可以:

  • 覆盖默认行为,例如检查元素名称(如“Song”)并省略无用的缩进符号
  • 关闭XmlWriter缩进(XmlWriterSettings.Indent = false)并添加自己的方法,在需要时手动编写缩进