C#/Blazor

[Blazor] 버튼 클릭할 경우 XML 파일 열기(3) - XML 파일 data 읽어 console에 출력하기

HYOKYE0NG 2021. 10. 14. 09:44
반응형

 

 

[Blazor] 버튼 클릭할 경우 XML 파일 열기(2) - 메모장으로 열기

[Blazor] 버튼 클릭할 경우 XML 파일 열기(1) 버튼을 클릭하면 어떤 경로에 있는 xml 파일을 열어보자 우선 나는 Blazor로 프로젝트를 진행중이고, UI로는 Telerik을 사용하고 있다. 이 상황에서 내가 해야

hyokye0ng.tistory.com

이전 포스팅에서는 XML파일을 메모장으로 열었다.

이번 포스팅에서는 XML파일을 읽어 데이터를 console에 바로 뿌려보도록 하겠다.

 

XML 파일에 접근하기 위해서는 System.Xml을 사용해야 한다.

XML파일을 읽는 것에는 다양한 방법이 있지만, 나는 XML.Load를 이용하여 파일을 읽었다.

 

그리고 나는 xml파일을 읽을 때 특이한 오류가 있었다.

xml 파일 안에는 UTF-8로 인코딩 되어있다고 명시되어 있었지만, 메모장에서 확인해본 결과

UTF-16으로 인코딩 되어있었다.

그래서 explorer에서 기존 파일이 열리지도 않았다.

파일의 내부에서 encoding="UTF-16"으로 수정하면 explorer에서 열렸지만, 업무 프로젝트였기 때문에

내 마음대로 파일을 수정할 수도 없는 노릇이었다.

그래서 xml파일을 읽을 때 encoding을 unicode로 지정하여 읽어왔다.

 

 

string xmlrepositoryString = SysinfoService.GetXMLRepository();
string xml_path = @$"{xmlrepositoryString}\{dcn_no}.xml";

우선, xml 파일의 경로를 알아야 하기 때문에 경로를 가져온 후

경로 뒤에 파일 명을 결합하여 xml_path를 생성했다.

 

if (File.Exists(xml_path))
    {
        xml_doc = new XmlDocument();
        using (var reader = new StreamReader(xml_path, Encoding.Unicode))
        {
            xml_doc.Load(reader);
            xml_doc.Save(Console.Out);
        }
    }
    else
    {
        Console.WriteLine("error");
    }

xml_doc라는 XmlDocument 객체를 생성하고,

reader라는 streamReader 객체를 생성했다. StreamReader를 생성할 때 xml 파일의 경로와,

encoding 방식을 지정해주었다.

그러고 reader를 사용하여 xml파일을 Load한 후 console에 출력했다.

 

그럼 콘솔에 이렇게 깔끔하게 출력된 것을 볼 수 있다.

 

 

<최종코드>

@using System.Xml
@using System.IO
@using System.Text
@inject SysinfoService SysinfoService

@code{
	public string dcn_no { get; set; }
    public string xmlrepositoryString { get; set; }
    public XmlDocument xml_doc { get; set; }
    
    protected override void OnInitialized()
    {
    	XML_Load(dcn_no);
    }

	private void XML_Load(string dcn_no)
    {
        xmlrepositoryString = SysinfoService.GetXMLRepository();
        string xml_path = @$"{xmlrepositoryString}\{dcn_no}.xml";

        if (File.Exists(xml_path))
        {
            xml_doc = new XmlDocument();
            using (var reader = new StreamReader(xml_path, Encoding.Unicode))
            {
                xml_doc.Load(reader);
                xml_doc.Save(Console.Out);
            }
        }
        else
        {
            Console.WriteLine("error");
        }
    }
}

 

반응형