관련 : 어떻게 (유닉스) 쉘 스크립트에서 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
.
답변
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
--recover
XML 문서가 손상되면 옵션 이 부족할 수 있습니다 . 또는 엄격한 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