C#

C# Xml의 노드의 값 일괄 변환

위ㄱㅎ 2020. 3. 7. 17:20

C# Xml의 값을 일괄 변환한다.

사용 메소드

Regex.Replace : 정규식에 일치하는 것 들을 한번에 치환한다.

HttpUtility.HtmlDecode : Xml Escape Char를 String 으로 다시 변환
XDocument.Parse(string) : 해당 string을 Pretty XML 형식으로 변환

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Xml.Xsl;

namespace XmlLeafNoteConverter
{
    public class Program
    {
        static void Main(string[] args)
        {

            string input = "<GROUP alias=\"XR\" aliasTxt=\"XP 매출 &amp; 기타\"><STATEMENT><BUIZEI>에&lt;라&amp;이</BUIZEI><TAX>모르겠다</TAX><ITEMS><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM></ITEMS></STATEMENT></GROUP><GROUP alias=\"XR\" aliasTxt=\"XP 매출 &amp; 기타\"><STATEMENT><BUIZEI>에&lt;라&amp;이</BUIZEI><TAX>모르겠다</TAX><ITEMS><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM><ITEM><BUIZEI>아이템안쪽1</BUIZEI><TAX>아이템안쪽2</TAX></ITEM></ITEMS></STATEMENT></GROUP>";
            string formatInput = $"<Wie>{input}</Wie>"; //들어올 xml이 RootNode 일 경우를 대비한다

            var regex = new Regex("(\\<.*?\\>)(.*)(\\<\\/.*?\\>)");
            
            
            var result = regex.Replace(HttpUtility.HtmlDecode((XDocument.Parse(formatInput).ToString())), x =>
               {
                   var prefix = x.Groups[1].Value;
                   var value = x.Groups[2].Value;
                   var suffix = x.Groups[3].Value;

                   return $"{prefix}<![CDATA[{value}]]>{suffix}";
               }
            );
            string replaceResult = result.Replace("<Wie>", "").Replace("</Wie>", "");
        }
    }
}