如何从XmlDocument获取带有缩进和换行的XML的最简单方法?

13 浏览
0 Comments

如何从XmlDocument获取带有缩进和换行的XML的最简单方法?

当我使用XmlDocument从头开始构建XML时,OuterXml属性已经将所有内容以漂亮的缩进和换行符进行了整理。然而,如果我在一些非常“压缩”的XML上调用LoadXml(没有换行或缩进),那么OuterXml的输出将保持不变。那么...\n如何以最简单的方式从XmlDocument实例中获得美化的XML输出?

0
0 Comments

问题的出现原因:

在使用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的方法并不能实现文本重排。

0
0 Comments

问题的出现原因是在使用XmlDocument保存XML文件时,输出的XML文件没有正确缩进和换行。使用XmlTextWriter的Formatting属性设置为Formatting.Indented可以实现缩进,但是在某些情况下可能只能缩进一行而不是全部。

解决方法是使用下面的代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml("wrench");
using (XmlTextWriter writer = new XmlTextWriter("data.xml", null)) {
    writer.Formatting = Formatting.Indented;
    doc.Save(writer);
}

这段代码首先创建了一个XmlDocument对象,并使用LoadXml方法加载一个包含XML内容的字符串。然后,使用using语句创建一个XmlTextWriter对象,并将其Formatting属性设置为Formatting.Indented,以便自动缩进输出的XML文件。最后,使用doc.Save方法将XmlDocument对象保存为XML文件。

使用上述代码可以实现将XmlDocument保存为带有正确缩进和换行的XML文件。

0
0 Comments

问题的原因是用户想要从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的问题,并提供了一些额外的解决方法和注意事项。

0