[xml] 커맨드 라인에서 XML을 예쁘게 인쇄하는 방법은 무엇입니까?

관련 : 어떻게 (유닉스) 쉘 스크립트에서 JSON을 꽤 – 인쇄 할 수 있습니까?

사람이 읽을 수있는 형식으로 XML을 형식화하는 (유닉스) 셸 스크립트가 있습니까?

기본적으로 다음을 변형하고 싶습니다.

<root><foo a="b">lorem</foo><bar value="ipsum" /></root>

…이 같은 것으로 :

<root>
    <foo a="b">lorem</foo>
    <bar value="ipsum" />
</root>



답변

libxml2-utils

이 유틸리티는 다음과 함께 제공됩니다 libxml2-utils.

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xmllint --format -

XML::Twig

이 명령은 XML :: Twig 와 함께 제공됩니다. 모듈, 때로는 xml-twig-tools패키지 :

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xml_pp

xmlstarlet

이 명령은 다음과 xmlstarlet같이 제공됩니다 .

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xmlstarlet format --indent-tab

tidy

tidy패키지를 확인하십시오 :

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    tidy -xml -i -

파이썬

파이썬 xml.dom.minidom은 XML을 포맷 할 수 있습니다 (python2 및 python3).

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print(xml.dom.minidom.parseString(s).toprettyxml())'

saxon-lint

당신이 필요합니다 saxon-lint:

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    saxon-lint --indent --xpath '/' -

saxon-HE

당신이 필요합니다 saxon-HE:

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \
    -s:- -qs:/ '!indent=yes'


답변

xmllint --format yourxmlfile.xml

xmllint 는 명령 행 XML 도구이며 libxml2( http://xmlsoft.org/ )에 포함되어 있습니다.

===================================================

참고 : libxml2설치 하지 않은 경우 다음을 수행하여 설치할 수 있습니다.

CentOS

cd /tmp
wget ftp://xmlsoft.org/libxml2/libxml2-2.8.0.tar.gz
tar xzf libxml2-2.8.0.tar.gz
cd libxml2-2.8.0/
./configure
make
sudo make install
cd

우분투

sudo apt-get install libxml2-utils

사이 그윈

apt-cyg install libxml2

맥 OS

Homebrew와 함께 MacOS에 이것을 설치하려면 다음을 수행하십시오.
brew install libxml2

힘내

코드를 원한다면 Git에서도 사용 가능합니다 :
git clone git://git.gnome.org/libxml2


답변

당신은 또한 사용할 수 있습니다 정돈 (: sudo는 우분투에 예를 먼저 설치해야 할 수도있는 apt-get install tidy).

이를 위해 다음과 같은 문제가 발생합니다.

tidy -xml -i your-file.xml > output.xml

참고 : 추가 가독성 플래그가 많이 있지만 단어 줄 바꿈 동작은 약간 짜증나게합니다 ( http://tidy.sourceforge.net/docs/quickref.html ).


답변

파일에 대해서는 언급하지 않았으므로 명령 행에서 XML 문자열을 표준 입력으로 제공한다고 가정합니다. 이 경우 다음을 수행하십시오.

$ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -


답변

macOS / 대부분의 Unix에 아무것도 설치하지 않습니다.

사용하다 tidy

cat filename.xml | tidy -xml -iq

cat을 사용하여 파일보기를 리디렉션하여 xml 파일 형식을 지정하고 자동 출력 중에 들여 쓰기하면 오류 출력이 억제됩니다. JSON은 또한 작동합니다 -json.


답변

xmllint는 내부 서식을 지원합니다 .

for f in *.xml; do xmllint -o $f --format $f; done

Daniel Veillard가 다음과 같이 썼습니다 :

xmllint -o tst.xml --format tst.xml
파서는 직렬화하기 위해 출력을 열기 전에 입력을 트리에 완전히로드하므로 안전해야 한다고 생각
합니다.

들여 쓰기 레벨은 XMLLINT_INDENT기본적으로 2 개의 공간 인 환경 변수에 의해 제어됩니다 . 들여 쓰기를 4 개의 공백으로 변경하는 방법의 예 :

XMLLINT_INDENT='    '  xmllint -o out.xml --format in.xml

--recoverXML 문서가 손상되면 옵션 이 부족할 수 있습니다 . 또는 엄격한 XML 출력으로 약한 HTML 파서를 사용해보십시오.

xmllint --html --xmlout <in.xml >out.xml

--nsclean, --nonet, --nocdata, --noblanks등이 유용 할 수 있습니다. 매뉴얼 페이지를 읽으십시오.

apt-get install libxml2-utils
apt-cyg install libxml2
brew install libxml2


답변

이것은 내 Mac에서 작동하는 것을 찾는 데 영원히 걸렸습니다. 나를 위해 일한 것은 다음과 같습니다.

brew install xmlformat
cat unformatted.html | xmlformat