我想打开一个XML文件并在Emacs中以特殊方式处理它。 (让我们假设一个主要的模式,这个模式被定制为打开XML文件并处理它并以特殊的方式呈现) 我想要做的就是在XML中隐藏额外的标记标记并仅向用户显示内容。任何人都可以告诉我我该怎么做?如何隐藏Emacs中的额外信息
`<name id=22> Luke </name>`
=>我只想要显示“Luke”。
我想打开一个XML文件并在Emacs中以特殊方式处理它。 (让我们假设一个主要的模式,这个模式被定制为打开XML文件并处理它并以特殊的方式呈现) 我想要做的就是在XML中隐藏额外的标记标记并仅向用户显示内容。任何人都可以告诉我我该怎么做?如何隐藏Emacs中的额外信息
`<name id=22> Luke </name>`
=>我只想要显示“Luke”。
这样做的一种方法是使用正则表达式从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
)
)
M-X SGML隐藏标签RET
菜单SGML剖面图看到一些相关的命令
关于您的解决方案的第二部分,你可以给我一些暗示我该怎么办呢?一个链接或一些进一步的解释?非常感谢 – Arash 2012-07-22 13:29:44
你的意思是? – 2012-07-22 13:44:52
临时缓冲方法的替代方法。我可以使用搜索功能提取元素(使用正则表达式),然后我可以怎么做剩下的? (把它们放在文件的底部并缩小..)你能把解决方案放在答案中吗?谢谢 – Arash 2012-07-22 15:52:49