Jak ładnie wydrukować XML z wiersza poleceń?
Related: Jak mogę wydrukować JSON w skrypcie powłoki (unix)?
Czy istnieje skrypt powłoki (unix) formatujący XML w formie czytelnej dla człowieka?
W zasadzie chcę, aby przekształciła się ona w:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... w coś takiego:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
5 answers
Spróbuj to zrobić:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xmllint --format -
To narzędzie pochodzi z libxml2-utils
Lub
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xml_pp
To polecenie pochodzi z XML:: Gałązka perl moduł, czasami xml-twig-tools
pakiet.
Lub
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xmlstarlet format --indent-tab
To polecenie pochodzi z xmlstarlet
Lub
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
tidy -xml -i -
Sprawdź tidy
pakiet
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 '/' -
Sprawdź 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 22:48:48
xmllint --format yourxmlfile.xml
Xmllint jest narzędziem XML wiersza poleceń i znajduje się w libxml2
(http://xmlsoft.org/).
================================================
Uwaga: Jeśli nie masz zainstalowanego libxml2
, możesz go zainstalować wykonując następujące czynności:
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
Ubuntu
sudo apt-get install libxml2-utils
MacOS
Aby zainstalować to na MacOS z Homebrew wystarczy zrobić:
brew install libxml2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 06:00:45
Możesz również użyć tidy , które mogą być najpierw zainstalowane (np. na Ubuntu: sudo apt-get install tidy
).
W tym celu wydasz coś w stylu:
tidy -xml -i your-file.xml > output.xml
Uwaga: ma wiele dodatkowych znaczników czytelności, ale zachowanie zawijania wyrazów jest nieco irytujące do rozplątania ( http://tidy.sourceforge.net/docs/quickref.html).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-12 16:50:21
Nie wspomniałeś o pliku, więc zakładam, że chcesz podać łańcuch XML jako standardowe wejście w wierszu poleceń. W takim przypadku wykonaj następujące czynności:
$ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-18 19:09:58
Xmllint obsługuje formatowanie in-place :
for f in *.xml; do xmllint -o $f --format $f; done
Jak napisał Daniel Veillard:
Myślę
xmllint -o tst.xml --format tst.xml
powinno być bezpieczne, ponieważ parser w pełni załaduje dane wejściowe do drzewa przed otwarciem wyjścia w celu serializacji go.
Poziom wcięcia jest kontrolowany przez zmienną środowiskową XMLLINT_INDENT
, która domyślnie zawiera 2 spacje. Przykład jak zmienić wcięcie na 4 spacje:
XMLLINT_INDENT=' ' xmllint -o out.xml --format in.xml
Możesz mieć brak z opcją --recover
gdy dokumenty XML są złamana. Lub spróbuj słabego parsera HTML ze ścisłym wyjściem XML:
xmllint --html --xmlout <in.xml >out.xml
--nsclean
, --nonet
, --nocdata
, --noblanks
etc mogą być przydatne. Przeczytaj stronę podręcznika.
apt-get install libxml2-utils
apt-cyg install libxml2
brew install libxml2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 08:17:35