格式化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();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值