2013-04-18 2 views

Odpowiedz

611

spróbować zrobić to:

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

Narzędzie to przychodzi z libxml2-utils

lub

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

ta komenda jest wyposażony XML::Twig modułu, czasami xml-twig-tools opakowaniu.

lub

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

ta komenda jest wyposażony xmlstarlet

lub

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

check tidy pakietu

lub

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()' 

lub

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

check saxon-lint

lub

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' 

Sprawdź saxon-HE

+0

Dobra, szybka odpowiedź. Pierwsza opcja wydaje się być bardziej wszechobecna na nowoczesnych instalacjach * nix. Niewielki punkt; ale czy można go wywołać bez pośrednictwa pliku pośredniego? Tj. "Echo" "| xmllint --some-read-from-stdn-option'? – svidgen

+0

Zobacz mój zredagowany post –

+0

Pakiet jest "libxml2-utils" w moim pięknym ubuntu. – franzlorenzon

9

Nie wspominając plik, więc zakładam, że chcesz, aby zapewnić ciąg XML jako standardowe wejście w linii poleceń. W takim przypadku należy wykonać następujące czynności:

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

Aby xmllint dostępne w systemach Debian, trzeba zainstalować pakiet libxml2-utils (libxml2 nie przewiduje tego narzędzia, a przynajmniej nie na Debiana 5.0 „Lenny” i 6.0 " Ściskać").

95

xmllint --format yourxmlfile.xml

xmllint XML jest narzędziem wiersza poleceń i jest wliczone w libxml2 (http://xmlsoft.org/).

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

Uwaga: Jeśli nie masz libxml2 zainstalowany można go zainstalować, wykonując następujące czynności:

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 

Ubuntu

sudo apt-get install libxml2-utils

MacOS

Aby to zainstalować na MacOS z Homebrew prostu zrobić: brew install libxml2

+4

Odpowiedź sputnick zawiera tę informację, ale odpowiedź crmpicco jest najbardziej użyteczną odpowiedzią na ogólne pytanie o to, jak ładnie drukować XML. –

+2

możemy wypisać to sformatowane xml do innego pliku xml i użyć tego .. np. Xmllint --format yourxmlfile.xml >> new-file.xml – LearnToLive

+2

W Ubuntu 16.04 możesz użyć: 'sudo apt-get install libxml2-utils' – Melle

27

Można również użyć tidy, które mogą być potrzebne do pierwszej instalacji (np w systemie Ubuntu: sudo apt-get install tidy).

Do tego, by wydać coś jak następuje:

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

Uwaga: posiada wiele dodatkowych flagi czytelności, ale zachowanie word-wrap jest nieco irytujące rozplątać (http://tidy.sourceforge.net/docs/quickref.html).

+0

Pomocne, ponieważ nie mogłem dostać xmllint, aby dodać linebreaks do pojedynczego pliku xml linii. Dzięki! – xlttj

+0

'Tidy' działa również dla mnie. W przeciwieństwie do 'hxnormalize', to faktycznie zamyka znacznik' '. –

+6

BTW, oto kilka opcji, które okazały się przydatne: 'tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes < InFile.xml> OutFile.xml'. –