Bir XML arabelleğini nasıl önbelleğe alır / biçimlendirir?


17

Hepsi bir satırda xml ile bir dosya var. Bu tamponu kullanıcı tarafından okunabilir olacak şekilde yeniden biçimlendirmek için işlevsellik zaten mevcut mu?


4
FWIW şu soru soruldu: stackoverflow
YoungFrog

Yanıtlar:


24

Bu tamponu kullanıcı tarafından okunabilir olacak şekilde yeniden biçimlendirmek için işlevsellik zaten mevcut mu?

Tabii ki ve birçok seçeneğiniz var. Muhtemelen bunu kullanarak harici bir programa beslerdim:

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

Bu program ile birlikte geliyor libxml2. Ayrıca kullanabilirsiniz tidy. Komut satırı xml biçimlendirme araçlarının listesi: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

Ayrıca bir arama yapabilir ve değiştirebilir ve daha sonra girinti yapabilirsiniz:

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

Düzenli numara: Yukarıdaki dizeyi kopyalayıp M-:( eval-expression) şu şekilde yapıştırabilirsiniz :

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

Güzel bir cevap, ancak şimdi yazılan komutun tampon içeriğini shell komutunun çıktısıyla değiştireceğine dikkat edin. Bunun nedeni C-uönektir.
FredrikHedman

3
Cevap, emac'ların yapamayacağı anlamına gelir.
Sergey Kostrukov

13

Yerleşik sgml-modebunu yapmak için bir komut vardır: sgml-pretty-print. İçindeyseniz önce nxml-modegeçiş yapmanız gerekiyor gibi görünüyor sgml-mode. Geçici olarak sgml moduna geçmek, güzel yazdırmayı çalıştırmak ve sonra nxml moduna geçmek için bir komut yazabilirsiniz.

Örneğin, isteğe bağlı olarak otomatik doldurma etkinken bölgeyi güzel bir şekilde yazdıracak bir komut aşağıdadır:

(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

bunu şu adrese yaz ~/.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))))

emacs'ı yeniden yükleyin, ardından M-x reformat-xmlkötü biçimlendirilmiş xml arabelleğini çağırmanız yeterlidir.

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


0

Yukarıdaki cevabın ipucunu takip ederek ve tidybir varyasyon yüklediğinizi varsayarsak :

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

Bu, arabellek *Shell Command Output*içeriğini doğrudan değiştirmek yerine yeni bir tampon açacaktır . Sonucu kontrol ettikten sonra, eski içerikleri yenisiyle değiştirin:

C-x h M-insert-buffer

muhtemelen önerilen varsayılanı seçin *Shell Command Output*. Komutu daha sonra kullanmak üzere bir klavye makrosu ile kaydedebilirsiniz:

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

Bununla M-x pretty-xmltamponu yeniden biçimlendirmek için çalıştırabilirsiniz .


0

Xml'nizi işaretleyin ve şunları yapın:

M-x sgml-pretty-print

Veya tüm arabelleği önceden ayarlamak için işaretli bir bölge olmadan komutu çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.