이전에 질문을 했지만 중복으로 종료되었습니다.쉘 스크립트를 사용하여 XML을 CSV로 구문 분석하는 방법은 무엇입니까?. 링크된 사본의 대답은 XMLStarlet이라는 도구를 사용하는 것을 제안하지만 OS X에서 이 도구를 사용하는 방법을 잘 모르겠습니다.
또한 "라는 제목의 다른 Q&A에 대한 링크도 있습니다.두 레이블 사이의 텍스트xslt
" ?를 사용하여 보여준 예는 man xlst
작동하지 않았지만 좀 더 자세히 살펴보니 일종의 Perl 스크립트인 것 같았습니다.StackOverflow에 있는 내용입니다., 이것이 나를 이런 결론으로 이끈다.
누군가 OS X에서 XML 파일을 CSV로 간단히 변환하는 방법에 대한 지침을 제공할 수 있습니까?
답변1
XMLStarlet 애플리케이션은 다음과 같습니다.다음을 통해 OSX에서 사용 가능brew
이므로 다음과 같이 설치할 수 있습니다.
$ brew install xmlstarlet
설치한 후에는 명령줄을 통해 사용할 수 있습니다 xmlstarlet
.
용법
$ xmlstarlet
XMLStarlet Toolkit: Command line utilities for XML
Usage: xmlstarlet [<options>] <command> [<cmd-options>]
where <command> is one of:
ed (or edit) - Edit/Update XML document(s)
sel (or select) - Select data or query XML document(s) (XPATH, etc)
tr (or transform) - Transform XML document(s) using XSLT
val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
fo (or format) - Format XML document(s)
el (or elements) - Display element structure of XML document
c14n (or canonic) - XML canonicalization
ls (or list) - List directory as XML
esc (or escape) - Escape special XML characters
unesc (or unescape) - Unescape special XML characters
pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879)
p2x (or depyx) - Convert PYX into XML
<options> are:
-q or --quiet - no error output
--doc-namespace - extract namespace bindings from input doc (default)
--no-doc-namespace - don't extract namespace bindings from input doc
--version - show version
--help - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.
Type: xmlstarlet <command> --help <ENTER> for command help
XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)
예
이 샘플 파일이 있다고 가정해 보겠습니다 sample.xml
.
$ cat sample.xml
<root>
<record id="1">
<keyA>val_1A</keyA>
<keyB>val_1B</keyB>
</record>
<record id="2">
<keyA>val_2A</keyA>
<keyB>val_2B</keyB>
</record>
<record id="3">
<keyA>val_3A</keyA>
<keyB>val_3B</keyB>
</record>
</root>
이 파일을 각 레코드(1, 2, 3)와 각 레코드에 해당하는 값(keyA, keyB)을 한 줄에 포함하는 CSV로 구문 분석하려면 concat
다음 명령을 사용할 수 있습니다.
$ xmlstarlet \
sel -T -t -m /root/record \
-v "concat(@id,',',keyA,',',keyB)" \
-n sample.xml
그러면 다음과 같은 출력이 생성됩니다.
1,val_1A,val_1B
2,val_2A,val_2B
3,val_3A,val_3B
위 명령의 workhouse 라인이 이 concat()
함수입니다. 이는 XML 레코드에서 요소를 가져옵니다 /root/record
.