명령줄에 XML 문서의 태그만 표시

명령줄에 XML 문서의 태그만 표시

XML 문서의 태그 구조만 표시하는 데 사용할 수 있는 명령줄 명령이나 유틸리티가 있습니까? 나는 xmllint를 보았지만 이 작업을 수행하는 스위치를 보지 못했습니다. 이와 같은 구조의 경우

<tag1><tag2><tag2-5>value1</tag2-5><tag3>value2</tag3></tag2></tag1>

보고 싶어요

<tag1><tag2><tag2-5></tag2-5><tag3></tag3></tag2></tag1>

답변1

내 생각에 (그러나 확실하지는 않지만) 전역적으로 및 사이의 문자를 제거하여 >탈출 할 수 있습니다 <.

sed 's/>[^<]*</></g' /path/to/file.xml

답변2

다음 xmlstarlet명령은 문서의 모든 일반 텍스트 노드 값을 빈 문자열로 설정합니다. 또한 노드 사이의 공백을 유지하고(예쁜 인쇄 없음) XML 선언 태그( <?xml...?>) 추가를 생략합니다.

xmlstarlet ed -P -O -u '//child::text()' -v '' file.xml

예제 문서가 주어지면 file.xml이는 다음과 같이 생성됩니다.

<tag1><tag2><tag2-5></tag2-5><tag3></tag3></tag2></tag1>

아니요 -P-O옵션:

<?xml version="1.0"?>
<tag1>
  <tag2>
    <tag2-5></tag2-5>
    <tag3></tag3>
  </tag2>
</tag1>

또한 사용할 수 있습니다

xmlstarlet ed -d '//child::text()' file.xml

도착하다삭제값을 빈 문자열로 설정하는 대신 (null 값이 있는 노드 대신) 값이 없는 노드가 생성됩니다.

<?xml version="1.0"?>
<tag1>
  <tag2>
    <tag2-5/>
    <tag3/>
  </tag2>
</tag1>

추가 -P-O옵션이 생성됩니다.

<tag1><tag2><tag2-5/><tag3/></tag2></tag1>

당신이 무엇인지에 따라 달라집니다실제로이를 수행하려면 el( elements) 하위 명령을 사용하여 xmlstarlet문서 구조의 다른 표현을 얻을 수 있습니다.

xmlstarlet el file.xml

귀하의 예 출력 :

tag1
tag1/tag2
tag1/tag2/tag2-5
tag1/tag2/tag3

당신은 또한 볼 수 있습니다 xmlstarlet el --help.

관련 정보