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
.