格式化XML:输出有缩进效果的XML字符串

1. 一般情况下使用以下代码即可将XML字符串重新格式化:

        private   string  FormatXml( string  source)
        {
            StringBuilder sb 
=   new  StringBuilder();
            XmlTextWriter writer 
=   null ;
            
            
try
            {
                XmlDocument doc 
=   new  XmlDocument();
                doc.LoadXml(source);

                writer 
=   new  XmlTextWriter( new  StringWriter(sb));
                writer.Formatting 
=  Formatting.Indented;
                
                doc.WriteTo(writer);
            }
            
finally
            {
                
if  (writer  !=   null ) writer.Close();
            }

            
return  sb.ToString();
        }


2. 在某些情况下如果需要对XML代码中的Attribute也应用缩进样式,这个时候可以通过重写XMLTextWriter类的WriteStartAttribute方法来实现:

using  System.IO;
using  System.Text;
using  System.Xml;

namespace  Test
{
    
public   class  XmlReformatter : XmlTextWriter
    {
        
private  XmlReader xr;

        
private   readonly  StringWriter sw;

        
public  XmlReformatter(StringWriter sw) :  base (sw)
        {
            
this .sw  =  sw;
        }

        
public   override   void  WriteStartAttribute( string  prefix,  string  localName,  string  ns)
        {
            StringBuilder sb 
=   new  StringBuilder( " /r/n " );

            
int  i  =  xr.Depth;

            
for  (i  *=  Indentation; i  >   0 ; i -- ) sb.Append(IndentChar);

            sw.Write(sb.ToString());

            
base .WriteStartAttribute(prefix, localName, ns);
        }

        
public   override   void  WriteNode(XmlReader reader,  bool  defattr)
        {
            xr 
=  reader;
            
base .WriteNode(reader, defattr);
        }
    }
}


调用示例:

        private   string  FormatXmlAttribute( string  source)
        {
            StringBuilder sb 
=   new  StringBuilder();

            XmlTextReader tr 
=   new  XmlTextReader( new  StringReader(source));

            XmlReformatter formatter 
=   new  XmlReformatter( new  StringWriter(sb));
            formatter.Formatting 
=  Formatting.Indented;
            formatter.WriteNode(tr, 
true );
            formatter.Flush();
            formatter.Close();

            tr.Close();

            
return  sb.ToString();
        }

你可能感兴趣的:(格式化XML:输出有缩进效果的XML字符串)