반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발꿈나무

XML data 읽어 xml 형식으로 뿌리기 본문

C#/C#

XML data 읽어 xml 형식으로 뿌리기

HYOKYE0NG 2021. 10. 18. 15:09
반응형

XML data를 읽어와서 뿌릴 때 string으로 변환되어 줄바꿈이나 들여쓰기가 전혀 되지 않고,

그냥 한줄로 쭉 출력될 때가 있었다.

 

어떻게 하면 들여쓰기와 줄바꿈이 포함되어 깔끔하게 출력되는지 알아보자

 

 

1. XmlWriter 사용하기

XML 파일을 읽어와 xmlwritersetting의 속성을 이용하여 줄바꿈과 들여쓰기를 적용하는 방법이다.

Indent가 들여쓰기에 관한 속성이고, NewLine이 줄바꿈에 관한 속성이다.

xml_doc = new XmlDocument();

try {
	using (var reader = new StreamReader(xml_path, Encoding.Unicode))
	{
		xml_doc.Load(reader);
		xml_str = Beautify(xml_doc);
        Console.WriteLine(xml_str);
	}
} catch (Exception e) {
  	Console.WriteLine(e.Message);
}

private static string Beautify(XmlDocument doc)
    {
        StringBuilder sb = new();
        XmlWriterSettings setting = new XmlWriterSettings
        {
            Indent = true,
            IndentChars = "    ",
            NewLineChars = "\r\n",
            NewLineHandling = NewLineHandling.Replace
        };
        using (XmlWriter writer = XmlWriter.Create(sb, setting))
        {
            doc.Save(writer);
        }

        return sb.ToString();
    }

 

 

2. XElement 사용하기

두번째 방법은 XElement를 사용하는 방법이다.

 stream을 XmlReader로 읽는데 첫 번째 요소 노드를 찾을 때까지 읽어 XElement 개체를 로드한다.

try
{
	using (var reader = new StreamReader(xml_path, Encoding.Unicode))
	{
		XmlReader r = XmlReader.Create(reader);
        while(r.NodeType != XmlNodeType.Element)
        {
        	r.Read();
        }
        XElement element = XElement.Load(r);
        Console.WriteLine(element);
    }
}
catch (Exception e)
{
	Console.WriteLine(e.Message);
}

 

그런데 위의 코드와 아래의 코드 결과가 같다 왜일까 ???

try
{
	using (var reader = new StreamReader(xml_path, Encoding.Unicode))
	{
		element = XElement.Load(reader);
        Console.WriteLine(element);
	}
}
catch (Exception e)
{
	Console.WriteLine(e.Message);
}
반응형
Comments