2012-07-21 47 views
3

我想打开一个XML文件并在Emacs中以特殊方式处理它。 (让我们假设一个主要的模式,这个模式被定制为打开XML文件并处理它并以特殊的方式呈现) 我想要做的就是在XML中隐藏额外的标记标记并仅向用户显示内容。任何人都可以告诉我我该怎么做?如何隐藏Emacs中的额外信息

`<name id=22> Luke </name>` 

=>我只想要显示“Luke”。

回答

4

这样做的一种方法是使用正则表达式从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 
    ) 
) 
+1

关于您的解决方案的第二部分,你可以给我一些暗示我该怎么办呢?一个链接或一些进一步的解释?非常感谢 – Arash 2012-07-22 13:29:44

+0

你的意思是? – 2012-07-22 13:44:52

+0

临时缓冲方法的替代方法。我可以使用搜索功能提取元素(使用正则表达式),然后我可以怎么做剩下的? (把它们放在文件的底部并缩小..)你能把解决方案放在答案中吗?谢谢 – Arash 2012-07-22 15:52:49

2

逻辑的步骤将是 - 计算起始缓冲区的结束位置(点-max)和SAV在VAR - 通过你的XML循环,收集您的实体信息并将其粘贴在保存的位置 - 完成调用(窄区域原始点最大(点 - 最大))后。这将隐藏所有的XML,以便只有您的实体文本可见。

+0

谢谢你.. – Arash 2012-07-22 16:57:49

+0

不应该把变量,我保存在它的信息到这个狭隘的功能? – Arash 2012-07-22 17:03:59

1

M-X SGML隐藏标签RET

菜单SGML剖面图看到一些相关的命令