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

本文介绍了一种使用C#实现的XML格式化方法,包括基本的XML格式化以及如何通过自定义XmlTextWriter来实现属性的缩进格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值