2009-05-27 133 views
3

我想自动格式化XML模式定义文件。所有正常的漂亮东西:结束元素后的换行符,不变色。我见过this answerthis elisp,这给了我基本的知识。然而,除了那里之外,我还想在尖括号内的属性之间换行。在emacs XML模式下,如何格式化XML模式文件?

像这样。之前:

<s:schema elementFormDefault="qualified" targetNamespace="urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" xmlns:tns="urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" xmlns:detail="urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" xmlns:to="urn:Cheeso.2009.05.Finance/TransferObject/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:address="urn:Cheeso.2009.05.Finance/TransferObject/Address/" xmlns:caller="urn:Cheeso.2009.05.Finance/TransferObject/Caller/" xmlns:gwy="urn:Cheeso.2009.05.Finance/TransferObject/Gateway/" xmlns:tender="urn:Cheeso.2009.05.Finance/TransferObject/Tender/" > 
... 
</s:schema> 

后:

<s:schema 
    elementFormDefault = "qualified" 
    targetNamespace = "urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" 
    xmlns:tns   = "urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" 
    xmlns:detail  = "urn:Cheeso.2009.05.Finance/TransferObject/TransactionDetail/" 
    xmlns:to   = "urn:Cheeso.2009.05.Finance/TransferObject/" 
    xmlns:s   = "http://www.w3.org/2001/XMLSchema" 
    xmlns:address  = "urn:Cheeso.2009.05.Finance/TransferObject/Address/" 
    xmlns:caller  = "urn:Cheeso.2009.05.Finance/TransferObject/Caller/" 
    xmlns:gwy   = "urn:Cheeso.2009.05.Finance/TransferObject/Gateway/" 
    xmlns:tender  = "urn:Cheeso.2009.05.Finance/TransferObject/Tender/" > 
... 
</s:schema> 

任何人都可以提出一些elisp的,可排队=?

回答

2

尝试类似如下:

(defun prettyprint-xml() 
    (interactive) 
    (goto-char (point-min)) 
    (while (search-forward "=" (point-max) t) 
    (search-forward "\"") 
    (search-forward "\"") 
    (forward-char) 
    (newline-and-indent)) 
    (align-regexp (point-min) (point-max) "\#")) 

它可能不会做的正是你想要的东西(我justcoded它),但它看起来像它应该为你呈现的情况下工作。