2009-05-27 128 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它),但它看起來像它應該爲你呈現的情況下工作。