¿Cómo embellecer / formatear un búfer XML?


Respuestas:


24

¿Ya existe la funcionalidad para reformatear este búfer para que el usuario pueda leerlo?

Por supuesto, y tienes muchas opciones. Probablemente lo alimentaría a un programa externo usando:

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

Este programa viene con libxml2. También podrías usar tidy. Aquí hay una lista de herramientas de formato xml de línea de comandos: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

También puede hacer una búsqueda y reemplazar y luego sangrar:

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

Truco ordenado: puede copiar y pegar la cadena anterior en M-:( eval-expression) de esta manera:

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

Una buena respuesta, pero tenga cuidado de que el comando como está escrito ahora reemplazará el contenido del búfer con la salida del comando de shell. Esto se debe al C-uprefijo.
FredrikHedman

3
La respuesta significa que emacs no puede hacerlo.
Sergey Kostrukov

13

El built-in sgml-modetiene un comando para hacer esto: sgml-pretty-print. Si estás dentro nxml-mode, parece que debes cambiar a sgml-modeprimero. Puede escribir un comando para cambiar temporalmente al modo sgml, ejecutar pretty-print y luego volver al modo nxml.

Por ejemplo, aquí hay un comando que imprimirá bastante la región, opcionalmente con autocompletar habilitado:

(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

escribe esto en tu ~/.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))))

vuelva a cargar emacs, luego solo llame M-x reformat-xmlal búfer xml mal formateado.

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


0

Siguiendo la pista de la respuesta anterior, y suponiendo que haya tidyinstalado una variación podría ser:

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

Esto abrirá un nuevo búfer en *Shell Command Output*lugar de reemplazar directamente el contenido del búfer. Después de verificar el resultado, reemplace el contenido anterior por el nuevo con:

C-x h M-insert-buffer

elija el valor predeterminado sugerido que probablemente sea *Shell Command Output*. Puede guardar el comando para más tarde con una macro de teclado:

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

Con esto puede ejecutar M-x pretty-xmlpara formatear el búfer.


0

Marque su xml y haga:

M-x sgml-pretty-print

O simplemente ejecute el comando sin una región marcada para embellecer todo el búfer.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.