Comment embellir / formater un tampon XML?


Réponses:


24

La fonctionnalité existe-t-elle déjà pour reformater ce tampon afin qu'il soit quelque peu lisible par l'utilisateur?

Bien sûr, et vous avez beaucoup d'options. Je le nourrirais probablement dans un programme externe en utilisant:

C-x h C-u M-| xmllint --format - RET

Ce programme est livré avec libxml2. Vous pouvez également utiliser tidy. Voici une liste d'outils de formatage xml en ligne de commande: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

Vous pouvez également effectuer une recherche et remplacer puis indenter:

M-% > < RET > C-q C-j < RET ! C-M-\

Astuce: vous pouvez copier et coller la chaîne ci-dessus dans M-:( eval-expression) comme ceci:

(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))

Une bonne réponse, mais méfiez-vous que la commande telle qu'elle est écrite maintenant remplacera le contenu du tampon par la sortie de la commande shell. C'est à cause du C-upréfixe.
FredrikHedman

3
La réponse signifie qu'emacs ne peut pas le faire.
Sergey Kostrukov

13

Le haut- sgml-modea une commande pour ce faire: sgml-pretty-print. Si vous y êtes, nxml-modeil semble que vous devez d' sgml-modeabord passer à . Vous pouvez écrire une commande pour basculer temporairement en mode sgml, exécuter pretty-print, puis revenir en mode nxml.

Par exemple, voici une commande qui imprimera joliment la région, éventuellement avec le remplissage automatique activé:

(defun xml-pretty-print (beg end &optional arg)
  "Reformat the region between BEG and END.
    With optional ARG, also auto-fill."
  (interactive "*r\nP")
  (let ((fill (or (bound-and-true-p auto-fill-function) -1)))
    (sgml-mode)
    (when arg (auto-fill-mode))
    (sgml-pretty-print beg end)
    (nxml-mode)
    (auto-fill-mode fill)))

7

écrivez ceci dans votre ~/.emacs.d/init.el:

(require 'sgml-mode)

(defun ninrod/reformat-xml ()
  (interactive)
  (save-excursion
    (sgml-pretty-print (point-min) (point-max))
    (indent-region (point-min) (point-max))))

rechargez emacs, puis appelez simplement M-x reformat-xmlle tampon xml mal formaté.

source: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/


0

En suivant l'indice de la réponse ci-dessus, et en supposant que vous avez tidyinstallé une variante, cela pourrait être:

`C-x h M-| tidy -quiet -xml -utf8 -indent -`

Cela ouvrira un nouveau tampon *Shell Command Output*au lieu de remplacer directement le contenu du tampon. Après avoir vérifié le résultat, remplacez l'ancien contenu par le nouveau par:

C-x h M-insert-buffer

choisissez la valeur par défaut suggérée qui sera probablement *Shell Command Output*. Vous pouvez enregistrer la commande pour plus tard avec une macro clavier:

C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml

Avec cela, vous pouvez exécuter M-x pretty-xmlpour reformater le tampon.


0

Marquez votre xml et faites:

M-x sgml-pretty-print

Ou exécutez simplement la commande sans région marquée pour embellir tout le tampon.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.