如何从XmlDocument获取带有缩进和换行的XML的最简单方法?
问题的出现原因:
在使用XmlDocument处理XML文档时,可能需要将XML文档进行缩进和换行显示,以便更好地阅读和理解。然而,使用XmlDocument默认的ToString()方法输出XML文档时,并不会进行缩进和换行处理,导致输出的XML文档不易阅读。
解决方法:
通过使用System.Xml.Linq.XElement.Parse()方法,可以将XmlDocument转换为XElement对象,再使用XElement的ToString()方法输出XML文档,就可以得到进行缩进和换行处理的XML文档。
具体示例代码如下:
try { RequestPane.Text = System.Xml.Linq.XElement.Parse(RequestPane.Text).ToString(); } catch (System.Xml.XmlException xex) { displayException("Problem with formating text in Request Pane: ", xex); }
这种方法的优点是生成的XML文档不会包含XML注释,因此适用于XML片段的处理。
需要注意的是,使用这种方法输出XML文档时,会移除XML文档中的``和``声明。这对于XML片段来说是可以接受的,但对于完整的XML文档来说可能不太理想。
根据我个人的经验,这是唯一一种能够正确缩进和换行XML文档的方法。其他使用XmlTextWriter、Formatting = Formatting.Indented和XmlWriterSettings的方法并不能实现文本重排。
问题的出现原因是在使用XmlDocument保存XML文件时,输出的XML文件没有正确缩进和换行。使用XmlTextWriter的Formatting属性设置为Formatting.Indented可以实现缩进,但是在某些情况下可能只能缩进一行而不是全部。
解决方法是使用下面的代码:
XmlDocument doc = new XmlDocument(); doc.LoadXml("- "); using (XmlTextWriter writer = new XmlTextWriter("data.xml", null)) { writer.Formatting = Formatting.Indented; doc.Save(writer); }
wrench
这段代码首先创建了一个XmlDocument对象,并使用LoadXml方法加载一个包含XML内容的字符串。然后,使用using语句创建一个XmlTextWriter对象,并将其Formatting属性设置为Formatting.Indented,以便自动缩进输出的XML文件。最后,使用doc.Save方法将XmlDocument对象保存为XML文件。
使用上述代码可以实现将XmlDocument保存为带有正确缩进和换行的XML文件。
问题的原因是用户想要从XmlDocument获取带有缩进和换行的格式化XML。然而,使用XmlDocument的默认Save方法保存XML时,并没有提供自动缩进和换行的选项。因此,用户需要找到一种简单的方法来实现这个目标。
解决方法是创建一个扩展方法Beautify,该方法将XmlDocument对象作为参数,并使用XmlWriter和XmlWriterSettings来实现缩进和换行。扩展方法首先创建一个StringBuilder对象,然后设置XmlWriterSettings的Indent、IndentChars、NewLineChars和NewLineHandling属性,以指定缩进和换行的格式。接下来,使用XmlWriter.Create方法创建一个XmlWriter对象,并将StringBuilder作为参数传递给它。然后,使用XmlDocument的Save方法将XML保存到XmlWriter中。最后,将StringBuilder转换为字符串并返回。
用户还注意到在某些情况下,上述方法可能无法正确设置XML的编码。为了解决这个问题,用户建议使用MemoryStream和StreamWriter来代替StringBuilder,并设置指定的编码。最后,通过使用enc.GetString方法从MemoryStream中获取文本。
另外,用户还提到了在使用扩展方法时不需要关于换行的设置选项,只需要设置关于缩进的选项即可。用户还指出,可以根据个人偏好,将IndentChars设置为"\t"以使用制表符进行缩进。
最后,用户还提到在使用扩展方法之前,不需要将doc.PreserveWhitespace设置为true,否则可能会导致部分缩进的失败。
用户通过创建一个扩展方法来解决从XmlDocument获取带有缩进和换行的格式化XML的问题,并提供了一些额外的解决方法和注意事项。