Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 美化XmlDocument(.NET)的最佳方法?_C#_.net_Xml - Fatal编程技术网

C# 美化XmlDocument(.NET)的最佳方法?

C# 美化XmlDocument(.NET)的最佳方法?,c#,.net,xml,C#,.net,Xml,假设我有一个System.Xml.XmlDocument,它的InnerXml是: Stan Laureliver Hardy 我想通过添加新行和空白来格式化它: <comedians> <act id="1" type="single" name="Harold Lloyd"/> <act id="2" type="duo" name="Laurel and Hardy"> <member>Stan Laurel&

假设我有一个
System.Xml.XmlDocument
,它的
InnerXml
是:

Stan Laureliver Hardy

我想通过添加新行和空白来格式化它:

<comedians>
    <act id="1" type="single" name="Harold Lloyd"/>
    <act id="2" type="duo" name="Laurel and Hardy">
        <member>Stan Laurel</member>
        <member>Oliver Hardy</member>
    </act>
</comedians>

斯坦·劳雷尔
奥列佛·哈台

我在
XmlDocument
类中查找了一些修饰方法,但没有找到。

基本上,您可以使用
XmlDocument.Save(Stream)
并将任何流作为目标传递以接收xml内容。包括“仅内存”
StringWriter
,如下所示:

string xml = "<myXML>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

using(StringWriter sw = new StringWriter())
{
    doc.Save(sw);
    Console.Write(sw.GetStringBuilder().ToString());
}
stringxml=”“;
XmlDocument doc=新的XmlDocument();
doc.LoadXml(xml);
使用(StringWriter sw=new StringWriter())
{
文件保存(软件);
Write(sw.GetStringBuilder().ToString());
}

更新:使用块

试图美化XML就像把口红贴在猪身上:它仍然不会很漂亮。


你为什么要美化它?如果是出于编辑目的,VisualStudio在以可读的形式呈现它方面做得相当好。如果是针对用户的,那么他们可能更喜欢在自己喜欢的编辑器或资源管理器中打开。Jon Galloway发布了一个答案并将其删除,但实际上这是我的最佳选择。事情是这样的:

StringBuilder Prettify(XmlDocument xdoc)
{
    StringBuilder myBuf = new StringBuilder();
    XmlTextWriter myWriter = new XmlTextWriter(new StringWriter(myBuf));
    myWriter.Formatting = Formatting.Indented;
    xdoc.Save(myWriter);
    return myBuf;
}

无需创建
XmlWriterSettings
对象。

您已经测试过了吗?它缩进了吗?还有-1表示不使用块。@Eduardo:doc.Save indents是正确的。我将取消反对票。WriteTo医生没有。你想使用(StringWriter sw=new StringWriter()){doc.Save(sw);Consolw.Write(sw.ToString());}奇怪的是,我尝试了将.WriteTo和.Save都保存到StringWriter,两次StringBuilder.ToString()都没有缩进。是的,但他错了两个原因,这就是他删除它的原因。不要使用XmlTextWriter。此外,还需要使用块。事实证明,缩进只需要XmlDocument.Save本身。如果我不使用using,会发生什么呢?如果你不使用using块,或者对实现IDisposable的对象调用.Dispose(),那么你可能会泄漏内存、句柄等,某处的一个小村庄就会起火。请参阅或谷歌IDisposable-不要厌倦“但它无论如何都会被终结器的宣传所调用。小编辑:在C#中实现它的最佳方式可能也是在VB.NET中实现它的最佳方式。