XMLファイルを開いてEmacsで特別な方法で処理したいと思います。(XMLファイルを開いて処理し、特別な方法で表示するようにカスタマイズされたメジャーモードを考えてみましょう)私がやりたいのは、XMLで余分なマークアップタグを非表示にし、コンテンツだけをユーザーに表示することです。誰かが私にこれをどのように行うべきかアドバイスできますか?
`<name id=22> Luke </name>`
=>「ルーク」を表示したいだけです。
XMLファイルを開いてEmacsで特別な方法で処理したいと思います。(XMLファイルを開いて処理し、特別な方法で表示するようにカスタマイズされたメジャーモードを考えてみましょう)私がやりたいのは、XMLで余分なマークアップタグを非表示にし、コンテンツだけをユーザーに表示することです。誰かが私にこれをどのように行うべきかアドバイスできますか?
`<name id=22> Luke </name>`
=>「ルーク」を表示したいだけです。
これを行う 1 つの方法は、正規表現を使用して XML から要素情報を抽出し、その要素情報を貼り付ける一時バッファを開いて表示することです。絞り込みが、マークアップを非表示にして要素情報のみを表示するのに十分なほど細かいかどうかはわかりません。
そうは言っても、一時バッファのアプローチに代わる方法は、要素情報を抽出し、それをファイルの下部に貼り付けてから、ソース マークアップが見えないようにファイルのその部分だけに絞り込むことです。
以下の関数は、私が考えていることをほぼ実行します。
(defun show-xml-entities ()
(interactive)
(save-excursion
(let ((old-max (point-max))) ;; save current end of buffer
(goto-char (point-min)) ;; go to beginning of buffer
(while (re-search-forward ">\\([^<>]+\\)<" nil t) ;; search for elements until not found
(when (> (length (match-string-no-properties 1)) 0) ;; if match is non-zero length
(setq temp (point-marker)) ;; save end of match
(goto-char (point-max)) ;; go to end of buffer
;; paste current match to end of buffer
(insert (concat (buffer-substring-no-properties (match-beginning 1) (match-end 1))))
(goto-char (marker-position temp)) ;; return to end of current match
)
)
(narrow-to-region old-max (point-max))) ;; narrow to newly pasted element text
)
)
論理的な手順は次のとおりです - 開始バッファーの終了位置 (point-max) を計算し、var に保存します - XML をループし、エンティティ情報を収集して、保存された位置の後に貼り付けます - 完了したら、呼び出し (narrow-to-region original-point -max (ポイントマックス))。これにより、すべての XML が非表示になり、エンティティ テキストのみが表示されます。
Mx sgml-hide-tags RET
メニューの SGML セクションを参照 いくつかの関連コマンドを表示