我想打开一个XML文件,并在Emacs中以特殊方式处理它。 (假设是一种主要模式,可以自定义打开XML文件并对其进行处理并以特殊方式呈现) 我想要做的是在XML中隐藏额外的标记标记,并向用户显示内容。任何人都可以建议我应该怎么做?
`<name id=22> Luke </name>`
=&GT;我只想要“卢克”出现。
答案 0 :(得分:4)
执行此操作的一种方法是使用正则表达式从XML中提取元素信息,然后打开一个临时缓冲区以供查看,以便粘贴该元素信息。我不确定缩小是否足够精细以隐藏标记并仅显示元素信息。
话虽如此,临时缓冲方法的替代方法是提取元素信息,将其粘贴到文件的底部,然后缩小到文件的那一部分,以便源标记不可见。 / p>
以下功能与我的想法大致相同:
(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
)
)
答案 1 :(得分:2)
逻辑步骤将是 - 计算变量中的起始缓冲区结束位置(point-max)和sav - 循环遍历XML,收集实体信息并在保存位置后粘贴它 - 完成呼叫时(窄到区域原点 - 最大值(点 - 最大值))。这将隐藏所有XML,以便只显示您的实体文本。
答案 2 :(得分:1)
M-x sgml-hide-tags RET
参见菜单SGML部分查看更多相关命令