Powershell 에서 XML 파일을 파싱하는 경우 아래와 같이 두가지 방법을 사용할 수 있습니다. 첫번째는 System.Xml.XmlDocument 타입을 사용하는 방법이고 두번째는 Select-Xml commandlets 을 사용하는 방법입니다.

1. System.Xml.XmlDocument 을 사용하는 방법

[xml]$cn = Get-Content "XML_PATH"

$links = $cn.SelectNodes('//linkedResources/link')

2. Select-Xml 을 사용하는 방법

$links2 = Select-Xml -path "XML_PATH" -XPath '//linkedResources/link' | Select-Object -ExpandProperty Node

Select-Xml 에 대한 자세한 사용방법을 확인하기 위해서는 아래 메뉴얼을 참조하시거나 Powershell 에 Get-Help Select-Xml -Detailed 라고 명령하면 메뉴얼을 확인 할 수 있습니다.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-xml?view=powershell-6

두 가지 방법 모두 XML_PATH 파일에 대해 XPath 의 형태로 각 node 에 접근 할 수 있고 $links, $links2 를 확인해 보면 같은 결과라는 것을 확인 할 수 있습니다.



MATLAB 에디터에서 코드를 작성하고 해당 코드에 대해서 문서를 생성할때 MATLAB 에디터의 퍼블리시 기능을 사용하곤 합니다. MATLAB 퍼블리시에서는 코드에 대해서 html, xml, latex, doc, ppt, pdf 등으로 문서를 생성해 줍니다. 퍼블리시 창에서 작업 폴더나 몇몇 옵션 등을 변경해 줄 수 있지만 사용 방법은 그냥 버튼 하나만 누르면 되기 때문에 뭐 그리 설명할게 없을 것 같습니다.

MATLAB Command Window 에서 문서를 생성하기 위해서는 아래와 같이 publish 명령어를 사용하면 됩니다. 첫 번째 인자로 파일명을 넣어 주고 두 번째 인자로 생성 하고자 하는 문서의 형태를 넣어주면 됩니다.

publish(‘publishTest.m’, ’doc’);

그런데 이렇게 간단한 문서 생성 방법도 코드가 잘못된 경우에는 생성이 잘 안 되는 경우가 있습니다.

바로 아래의 코드 예와 같이 루프문 안에 %% 기호로 된 섹션이 있는 경우에는 문서 생성이 굉장히 오래 걸리는 것을 볼 수가 있었습니다. 따라서 문서 생성을 위해서는 코드의 루프문 안에는 %% 기호를 사용해선 안됩니다.

루프 문 안에 있던 %% 섹션 표시를 % 주석으로 처리하고 문서 생성을 하니 정상적인 속도로 문서가 생성 되더군요.

문서 생성 결과를 보면 %% 로 된 섹션 표시는 하나의 챕터를 표시하는 것을 알 수가 있습니다.

For 문 안에 섹션 표시가 있으면 해당 섹션 부분을 문서의 목차에 계속해서 표시하게 될 것이므로 문제가 될 것입니다. 아마도 publish 기능에 루프 문안의 섹션에 대한 예외 처리는 안되어 있는것으로 생각되네요.



저는 요즘 xingAPI 를 사용하여 특정 조건이 되었을 때 원하는 주식을 사고 팔도록 하는 프로그램을 작성해 보고 있습니다. 완벽하진 않지만 일종의 시스템 트레이딩이라고 할 수 있죠. 이런 프로그램을 만들기 위해서는 당연히 조건을 저장을 해 놔야 될 텐데 조건을 저장하기 위해서 json 이나 XML 과 같은 형태를 사용할까 하다가 데이터베이스를 사용하게 되었습니다. 데이터베이스로는 예전에 사용해 본 경험이 있고 서버가 없어도 동작 가능한 SQLite 를 사용하고 있습니다. 데이터베이스를 사용하는 경우 UI 가 있으면 편리한데 아래 주소에서 소개한 PyQt 를 사용할까 하다가 ….

https://wikidocs.net/4234

UI 만들기 귀찮아서 대신 사용할 SQLite 용 DB Browser 로 아래 주소의 sqlitebrowser 를 설치해서 사용하고 있습니다.

http://sqlitebrowser.org/

그냥 UI 에서 제가 작성한 조건만 볼 수 있으면 되는거라 이정도면 될 것 같네요.



요즘 많은 분들이 XML 파일을 사용 할 것입니다. 요즘 자동차 소프트웨어의 경우 AUTOSAR 플랫폼이 들어가면서 arxml 이라는 형태의 XML 파일을 주로 사용하고 있습니다. 또한 티스토리 블로그의 오픈 API를 사용 하다 보면 XML 파일의 형태로 응답을 받곤 합니다. 그런데 이렇게 받은 XML 파일의 내용이 아래와 같이 정렬이 안 되어 있는 경우에는 보기가 굉장히 불편합니다. 이런 경우 적절한 툴을 사용하여 XML 파일을 정렬 한다면 보기가 편할 겁니다.



저는 윈도우용 에디터로 notepad++ 를 주로 사용 합니다. notepad++ 의 Plugin Manager 에는 정말 좋은 툴들이 많은데 XML 문서를 정렬 하기 위해서는 XML Tools 을 설치하면 됩니다. 혹시 Plugin Manager 가 설치 안 되신 분들은 아래 글을 보시고 설치 하시면 됩니다.

http://iamaman.tistory.com/2044


Plugin Manager 를 실행 한 후에 Available 탭에서 XML Tools 를 찾은 후에 체크 하구 install 버튼을 누르면 XML Tools 이 설치가 됩니다. 설치 후에는 아래 그림과 같이 installed 탭에 XML Tools 이 표시가 됩니다.




설치 후에는 정렬이 안 된 XML 파일을 열고 Ctrl + Shift + Alt + B 를 눌러 주거나 아래 그림과 같이 XML Tools 의 메뉴를 통해서 XML 파일을 정렬 할 수 있습니다.



정열을 하고 나면 이렇게 XML 문서가 예쁘게 나옵니다.




Python 을 사용하면서 이래 저래 많은 툴들을 많들어서 사용하는 중입니다. 

프로그램을 만들시 파라미터들은 보통 argument 에서 받고 했었는데 

파라미터가 매우 많다면 이런 값들은 파일을 통해 받게 만들곤 합니다. 

이런 파라미터 들은 보통 key : value 의 쌍으로 저장하곤 하는데 

이럴때 XML 을 많이 사용해 왔었습니다. 

그런데 XML 은 테그로 구성되다 보니 같은 내용이더라도 복잡해 보이더군요. 즉 가독성이 떨어진다는 생각이 들었습니다. 

그래서 요즘은 json 을 사용하고 있습니다. 

json 파일은 Python 에서 너무 쉽게 다음과 같이 파일을 load 할 수 있습니다. 

import json

with open(jsonFile) as data_file:
     Topology = json.load(data_file)


json 파일을 formatting 하고 싶은 경우에는 아래 주소의 사이트를 추천 합니다.


위 사이트에서는 json 파일을 XML, CSV, YAML 과 같은 형태로 변환 할 수 있으며 사람이 보기 좋게 Formatting 도 해주고 전달하기 좋게 Minify 도 해 줍니다.

이렇게 변환 된 Code 는 파일로 다운로드해서 사용 할 수 있습니다.


코드에 대한 문서화를 진행하는 경우 Doxygen 을 많이 사용하곤 합니다.

 

Doxygen 을 사용하면~ HTML, Latex, XML, RTF, CHM 등 다양한 형태로 문서를 만들 수 있는데~

 

CHM 파일을 만들때는 HTML Help Workshop and Documentation 라는 프로그램을 더 설치 해 줘야 합니다.

 

HTML Help Workshop and Documentation 다운로드 링크는 다음과 같습니다.

 

https://www.microsoft.com/en-us/download/details.aspx?id=21138

 

그 이외의 설정 방법은 아래 주소에 나와 있으니 간단히 따라 하시면 될 것 같네요.

 

https://codeyarns.com/2010/10/26/doxygen-generating-chm/



ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, ant, Apex Trigger, Arduino Sketch, ASP, ASP.NET, Assembly, autohotkey, awk, blank, Bourne Again Shell, Bourne Shell, C, C shell, c#, C++, C/C++ Header, C:\Windows, CCS, choco, chocolatey, cloc, cloc-1.62.exe, cloc-1.62.pl, cloc.exe, Clojure, ClojureScript, cmake, COBOL, CODE, CoffeeScript, coldfusion, ColdFusion CFScript, COMMENT, css, CUDA, cython, d, Dal, dart, DOS Batch, dtd, ECPP, erlang, expect, F#, focus, fortran 77, Fortran 90, fortran 95, Go, Grails, Groovy, Haml, Handlebars, harbour, Haskell, HLSL, HTML, IDL, install, InstallShield, Java, javascript, JavaServer Faces, JCL, JSON, jsp, kermit, Korn Shell, Kotlin, less, LEX, LISP, Lisp/OpenCL, LiveLink OScript, LUA, M4, make, matlab, maven, Modula3, MSBuild script, mumps, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, Ocaml, Oracle Forms, oracle reports, pascal, Pascal/Puppet, Path, Patran Command Language, perl, php, PHP/Pascal, Pig Latin, PL/I, PowerShell, python, QML, r, Racket, Razor, Rexx, RobotFramework, ruby, Ruby HTML, rust, SASS, Scala, sed, Skill, SKILL++, SMARTY, Softbridge Basic, sourceforge, SQL, SQL Data, SQL Stored Procedure, strip-comments, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, xml, xquery, xsd, XSLT, yacc, YAML, 라인수, 코드

이전 포스팅에서 powershell 을 사용한 코드 라인수 세기 방식에 대해 소개한 적이 있는데요~

 

http://iamaman.tistory.com/1577

 

검색을 해보니 역시나…… cloc 라는 프로그램이 있더군요.

 

cloc 의 홈 페이지는 아래와 같습니다.

 

http://cloc.sourceforge.net/

 

또는 이전에 소개했던 Chocolatey 을 사용하여 아래와 같이 설치 할 수 도 있더군요.

 

choco install cloc

 

다운로드 주소는 아래와 같습니다.

 

http://sourceforge.net/projects/cloc/files/cloc/


현재 최신 버전은 1.62 입니다.

 

 

현재 저는 윈도우 64비트를 사용 중이라 위 그림과 같은 페이지에서 cloc-1.62.exe 을 다운로드 받았습니다.


Perl 에 관심이 있는 분들은 cloc-1.62.pl 파일을 다운로드 받아서 소스를 살펴보는 것도 좋은 공부가 될 듯 하네요.

 

다운로드 받은 cloc-1.62.exe 파일을 cloc.exe 라는 이름의 심볼릭 링크로 해서 C:\Windows 와 같이 path 로 설정된 폴더에 넣거나 cloc.exe 로 파일명을 변경 한 후에 path 로 설정된 폴더에 넣습니다.

 

사용법은 굉장히 간단한데요~

 

CMD 창을 연 다음 아래 그림과 같이 cloc 파일명을 넣어 주고 엔터를 때리면~ 각 확장자 별로 code, blank, comment 줄 수 별로 카운트를 해서 목록으로 알려 줍니다.

 

 

위에 그림은 C++ 파일과 헤더 파일 MATLAB 파일의 Code, Blank, Comment 줄 수를 나타내 주는 것을 확인 할 수 있습니다. cloc 는 아래 주소에서 확인 할 수 있는 바와 같이 정말 다양한 언어에 대해 줄 수를 파악해 줍니다.

 

http://cloc.sourceforge.net/#Languages

 

ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, Ant, Apex Trigger, Arduino Sketch, ASP, ASP.Net, Assembly, AutoHotkey, awk, Bourne Again Shell, Bourne Shell, C, C Shell, C#, C++, C/C++ Header, CCS, Clojure, ClojureScript, CMake, COBOL, CoffeeScript, ColdFusion, ColdFusion CFScript, CSS, CUDA, Cython, D, DAL, Dart, DOS Batch, DTD, ECPP, Erlang, Expect, F#, Focus, Fortran 77, Fortran 90, Fortran 95, Go, Grails, Groovy, Haml, Handlebars, Harbour, Haskell, HLSL, HTML, IDL, InstallShield, Java, Javascript, JavaServer Faces, JCL, JSON, JSP, Kermit, Korn Shell, Kotlin, LESS, lex, Lisp, Lisp/OpenCL, LiveLink OScript, Lua, m4, make, MATLAB, Maven, Modula3, MSBuild script, MUMPS, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, OCaml, Oracle Forms, Oracle Reports, Pascal, Pascal/Puppet, Patran Command Language, Perl, PHP, PHP/Pascal, Pig Latin, PL/I, PowerShell, Python, QML, R, Racket, Razor, Rexx, RobotFramework, Ruby, Ruby HTML, Rust, SASS, Scala, sed, SKILL, SKILL++, Smarty, Softbridge Basic, SQL, SQL Data, SQL Stored Procedure, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, XML, XQuery, XSD, XSLT, yacc, YAML

 

--strip-comments 같은 옵션을 사용하면 comment 을 지울 수도 있더군요. 외부에 코드를 보낼 때 종종 활용하게 될 것 같네요.


데이터 베이스를 사용하다 보면 정상적으로 동작하는지 테스트를 하는 과정이 필요한데요~

 

테스트를 하기 위해서는 테스트 데이터를 insert 해야 할 텐데~

 

각 필드에 맞게 랜덤하게 데이터를 생성하는 것도 참 귀찮은 일입니다.

 

그래서 데이터베이스의 테스트 데이터를 생성하는 방법에 대해 검색 해 보니 아래 주소의 사이트가 나오더군요.

 

http://www.generatedata.com/

 

위 사이트에서 데이터 생성을 할 수 있지만 100 개 정도의 데이터만 생성 할 수 있는 등 제약 사항 들이 좀 있더군요.

 

하지만 http://www.generatedata.com/ 은 소스코드를 다운로드 받아서 자신의 서버에 설치하면 제약 없이 사용 할 수 있다는 군요. 서버 설치 방법은 아래 주소에 설명 되어 있습니다.

 

http://benkeen.github.io/generatedata/install.html

 

저는 어차피 그리 많은 데이터는 필요 없어서 간단하게 http://www.generatedata.com/ 을 그냥 사용하는데요~

 

아래 그림과 같이~ 각 column 의 이름과 타입을 정해 주고~ 기본적으로 4개의 column 을 설정 할 수 있는데~ 추가를 할거면 아래 그림에서와 같이 Add 를 눌러서 추가 하시면 됩니다.

 

SQL 뿐만 아니라 Excel, CSV, JSON, XML, HTML 형태로도 생성이 가능하더군요.

 

SQLite, MySQL, Oracle, Postgres 에 대해 테스트 데이터를 생성할 수 있고 설정을 다 마쳤으면~ 우측 하단의 generate 버튼을 누르면 됩니다.

 

위 화면의 설정에 따라 SQL 파일로도 떨궈주고~ 또는 새로운 페이지에서 아래 그림과 같이 INSERT 쿼리를 생성되게도 할 수 있더군요.



오늘은 간단하게 사용할 수 있는 C++ xml parser 하나 소개해 드리려 합니다.

 

Xml parser 라이브러리의 이름은 pugixml 이고요~

 

아래 주소에서 다운로드 가능합니다.

 

https://code.google.com/p/pugixml/downloads/list

 

다음 그림과 같이 편하실데로~ zip 또는 tar.gz 파일을 다운로드 받으면 됩니다. 저는 현재 최신버전인 1.2 버전의 zip 파일 버전인 pugixml-1.2.zip 을 다운로드 받았습니다.

 

압축을 해제하면 src,scripts,docs,contrib 폴더로 구성되는데요~ 이 중에서 src 폴더가 라이브러리 소스 파일입니다.

 

Xml 을 사용하고자 하는 폴더에 src 폴더의 pugixml.hpp, pugixml.cpp, pugiconfig.hpp 파일들을 추가한 후에 사용하시면 되겠습니다.

 

pugixml-1.2\docs\samples 에는 다양한 예제들이 있는데요~ 저는 xml 파일에 대한 load 부분만 필요해서 load_file.cpp 파일을 사용했습니다.

 

프로젝트에 pugixml.hpp, pugixml.cpp, pugiconfig.hpp, load_file.cpp파일을 추가하고 load_file.cpp 에서 사용하는 tree.xml 파일도 추가 해 줍니다.

 

다음으로 빌드를 하고 실행해 보면~ 다음과 tree.xml파일의 mesh 노드의 name attribute 의 내용인 mesh_root 를 선택적으로 읽어 올 수 있는 것을 확인 할 수 있습니다.

 

라이브러리가 파일만 추가하면 되서 사용하기 쉽고 사용법도 매우 편하네요~

 

속도 등에 대한 테스트는 안 해 봤지만 간단한 용도로 사용하는 제 입장에서는 대 만족이네요.

 

위에 예제로 사용한 codeblock 프로젝트 파일도 추가 합니다.

 


xmltest.zip



  1. Ok Man 2014.06.25 23:58 신고

    컴퓨터 언어 공부는 어렵지 않나요? 저도 공부해보고싶긴한데..

    • 남성 2014.06.26 00:39 신고

      하고 싶은데 어려울까봐 안하시는 건가요? 두려워 말고 시작해 보세요~ 꼭 프로그래머가 되려고 하는게 아니더라도 컴퓨터 언어 공부는 어느정도 필요하다고 봅니다. 요즘은 컴퓨터 교육이 아이들 교과과정에도 포함되고있는 추세죠~ 어차피 컴퓨터는 죽을때 까지 사용하잖아요. 간단한 스크립트 언어부터 시작해 보세요. 삶이 달라지실 거에여~ 블로그 운영에도 도움 되실 거에여~ 윈도우만 사용하신 다면 제 블로그에서도 소개하고 있는 Autohotkey 강추 드립니다.

  2. Ok Man 2014.06.26 02:16 신고

    아 그래요? 블로그 자주 들릴게요 기초적인것부터 차근차근 많이 알려주세요 ^^ 저도 예전부터 컴퓨터 언어에 대해서
    잠시나마 비쥬얼베이직은 배운적이 있지만 제대로 배워본적은 없어서 ㅎㅎ 자주 들릴게요 좋은정보 감사해요!!

    • 남성 2014.06.26 02:41 신고

      실제 그냥 윈도우 사용하는데는 비쥬얼 베이직은 그리 실용적이진 않은데~ Autohotkey 는 정말 실용적이거든요

지난 포스팅에서 Visio 대체 프로그램으로서 Dia에 대해 소개해 드렸었는데요~


2013/09/12 - [유틸] - Visio 대체 오픈 소스 프로그램 Dia


 

오늘은 이런 설치형 프로그램이 아닌 웹 페이지를 통해 바로 사용 가능한 프로그램에 대해 설명 드리려 합니다.

 

오늘 소개할 프로그램은 웹 페이지에서 순서도와 같은 그래프 그리기가 가능한 draw.io 입니다.

 

홈페이지는 아래 주수와 같구요~

https://www.draw.io/

 

설치형 프로그램이 아니라~ 웹브라우져만 있으면 바로 사용할 수 있다는 장점이 있습니다.

 

아래 그림과 같이 구글 드라이브와 연동해서 파일을 관리 할 수도 있고~


 

여러가지 shape 들이 구비가 되서 굉장히 편리 하더군요.

 

특히나 Dia 등에서는 shape의 회전등이 불편하다는 느낌이 있었는데~

 

draw.io 에서는 CTRL + R 만 누르면 shape 가 회전 되고~

 

shape 간의 정렬이나 연결 등도 매우 간단하게 할 수 있습니다.


 

파일 메뉴의 저장 형태를 보면 기본적으로는 XML 확장자 이지만~



파일 메뉴의 보내기를 통해서 PNG, GIF, JPG, PDF, SVG, XML 등과 같은 형태로 내보내서~ 워드와 같은 프로그램에서도 이용 가능 합니다.



도움 메뉴에 보시면~ video tutorial 이 있는데~ 영어라도 보다 보면 사용방법에 대해 감을 잡을 수 있을 겁니다.


 

 



아래 포스팅에서 MATLAB 단축키 설정 방법에 대해 설명을 드렸었는데요.

  

2011/04/01 - [MATLAB] - MATLAB shortcut, 단축키 설정

 

이런 단축키 설정들을 MATLAB 을 깔 때마다 다시 설정해 줘야 한다면 굉장히 귀찮은 일일 것입니다.

 

따라서 이런 설정 파일들은 파일로 저장해서 백업을 해 두고 다시 깔 때마다 로드 해서 사용하는 것이 바람직하다고 생각합니다.

 

MATLAB 데스크톱의 File à Preferences 메뉴에 들어가거나 MATLAB command 창에서 preferences 를 입력한 후 엔터를 치면~ 다음과 같이 preference 창이 나타납니다.

 

아래 그림과 같이 설정에 들어가서 Save as를 클릭하고 자신이 원하는 위치에 파일을 저장하시면 됩니다.

 

보통 MATLAB 설정 파일들은 prefdir 에 XML 파일의 형태로 저장되곤 합니다.

 

MATLAB command 창에 prefdir 이라고 치면 디렉토리명이 나타납니다.

 

그런데 이 prefdir 폴더가 보통은 C:\ 드라이브에 설정되므로 깜빡하고 컴터를 그냥 밀면 설정 파일이 다 날라가서 좀 짜증나죠~

 

그래서 저는 위 그림에서 보시는 바와 같이 설정 파일들은 보통 D:\ 드라이브에 보관합니다.

 

다음에 다시 깔아도 설정 파일은 그대로 로드해서 사용하면 되기 때문에 편리하죠~


+ Recent posts