OS X에서 xmlstarlet을 사용하여 XML을 CSV로 변환하는 방법에 대해 혼란스러우신가요?

OS X에서 xmlstarlet을 사용하여 XML을 CSV로 변환하는 방법에 대해 혼란스러우신가요?

이전에 질문을 했지만 중복으로 종료되었습니다.쉘 스크립트를 사용하여 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.

인용하다

관련 정보