반응형

Deserialize XML

        i. xml 파일을 읽어 XDocument 형식으로 치환

       ii. 전반적으로 코딩의 Xml 다루는 방식과 동일

      iii. Get XML Nodes > XDocument Node로 읽음

      iv.  Get XML Node Attributes > NodeAttributes 로 읽음
       
v. 노드를 잡는 부분부터는 System.Xml.XPath 네임스페이스가 별도로 필요

 

우선 xml 을 읽는 방법은 이전 포스트에서 다루었다

 

MTDING :: Read/Write Text File - (유용했던) Activity (tistory.com)

 

Read/Write Text File - (유용했던) Activity

i.          다양한 형식(txt, xml, json 등등)의 텍스트 파일 저장 및 불러오기       ii.          코딩 중 ReadStream, WriteStream의 역할      iii.          인코딩(ANSI 기본)을 자유자제

mtding00.tistory.com

우선 xml의 인코딩 및 문서 속성은 Read 액티비티로 다루어주면 되겠다. 해당 글에서는 편의를 위해 아무 속성 없는 쌩 데이터 xml 을 가지고 진행하겠다.

 

Deserialize 후 모습

스트링을 벗어낸 데이터가 XDocument 로 전환된다. 여기서부터도 모든 노드에 접근 가능해서 별도 구현 없이 줄코딩으로 원하는 데이터 혹은 순회 접근이 가능하다.

 

순회 기준 코드
UiPath Xml 순회문
순회 결과

 

Get XML Nodes (Attributes)

여기서부턴 System.Xml.XPath 네임스페이스가 필요하며, 아마 Xml 액티비티가 정상적으로 동작한다면 네임스페이스 추가는 자동으로 이루어질 것이다. 안 되면 새로고침이나 파일을 다시 여는 것을 추천한다. 위에서 처리된 XDocument를 Node단위로 한 번 더 나누어 보관할 수 있다.

CurrentNode 데이터 접근 인터페이스
XNode 순회 구조
Title Node에 접근 결과

현재 단계는 .xml 파일 > XDocument > XNode 까지 온 상황이다.

 

XML Node 내 Attribute에 접근한 모습

 

 

앞서 말했듯이 XDocument만으로 모든 데이터에 접근 가능하지만, XNode로 탈 경우 Attribute까지 더 다룰 수 있게 된다. 단, Attribute는 xml에 표시되지 않았을 경우 크기가 0인 상태로 반환하게 된다. > 순회를 돌려도 크기가 0이기 때문에 순회하지 않는다. 즉, 속성 데이터값이 없어도 Null 상태는 아니다.

 

원래, Xml을 역직렬화(Deserialze)를 하려면 Xml 데이터에 맞춰 클래스를 제작하여 진행했던 것으로 기억한다. 하지만, UiPath 개발 환경 상 사용자에 맞는 클래스 제작은 어렵기 때문에 LINQ에 있는 Xml 역직렬화를 그대로 가져온 것 같다.

 

UiPath XML Deserialize 결론

XElement 데이터 순회 접근 > Elements("Name")로 기준 배열 잡기 > Element("Name").Value로 요소 내 데이터 가져오기

XNode 데이터 순회 접근(XPath 네임스페이스 필요) > Get XML Nodes 로 산출된 변수 그대로 기준 배열 > XPathSelectElement("Name").Value로 요소 내 데이터 가져오기

 

 

 

Deserialize JSON

UiPath Json 접근 구조

Json 파일은 UiPath 프로젝트 파일을 사용했다. 

 

Json은 xml과 다르게 하나의 인터페이스만 제공한다. 그런데 짜피 여기서 제공해주는 인터페이스도 LINQ고 LINQ에 대해선 알 것만 아는 상황(ㅠㅠ)이라 안에 Json 관련 인터페이스가 더 존재할 수도 있다. 하지만, 일단 나는 현 시점에서 딱 하나밖에 몰라 이걸 기록한다.

 

SelectToken > 단일, SelectTokens > 배열

Json은 단일, 배열 둘 중 하나의 경우로 저장되어서 그 두 개를 받아주는 인터페이스도 두 개다. 또한, 아예 배열로 이루어진 Json 파일을 읽어주는 액티비티도 존재한다.

 

Deserialize JSON Array

Json이 아예 배열로 된 경우 액티비티 활용

 

배열로 된 파일은 Array 액티비티로 읽어야 한다. 그리고 해당 배열 변수를 순회시켜 데이터에 접근할 수 있다. 역시 해당 접근 함수는 SelectToken이다.

 

 

project 단일 파일 > Array 접근
힝힝 배열 파일 > 단일 액티비티 접근
project 단일 파일 > Array 접근 에러
힝힝 배열 파일 > 단일 액티비티 접근 에러

 당연하지만 배열 파일에 단일 액티비티, 단일 파일에 배열 액티비티를 사용할 경우 에러가 발생한다.

 

 

UiPath Json Deserialize 결론

Json 단일 파일 > 단일 액티비티 || Json 배열 파일 > 배열(~ Array) 액티비티 사용

사용 후 데이터 접근 인터페이스는 SelectToken(s) 로 같음

 

 

끝으로 프로젝트 간 제이슨 파일은 많이 봤는데, Xml은 거의 못봤다. 하지만 역직렬화를 모두 지원한다는 점을 알고 있으면 좋을 것 같아 작성하게 되었다. 즉, 결론은 대중적인 xml, json 데이터파일 정도는 자체 엔진에서 액티비티를 제공해준다. xaml은 안해봐서 모르겠당...(지만 될 것 같다. 짜피 Read로 불러오면 전부 string으로 담아버리니 말이다.)

 

 

 

 

 

 

반응형

'RPA' 카테고리의 다른 글

UiPath Image 처리  (0) 2024.08.23
Activate, Set Focus - (유용했던) Activity  (0) 2024.08.23
Trigger Scope - (생소한) Activity  (0) 2024.08.22
GenericValue 자료형, Format Value (생소한)  (0) 2024.08.22
Modify Date - (생소한) Activity  (0) 2024.08.21
Posted by Lotus' Library
,