我知道這是一個邊界情況,無論它確實屬於stackoverflow還是超級用戶,但是因爲似乎有很多「編輯代碼」問題在這裏,我將它張貼在SO上。如何獲得一個平坦的XML,以便將外部實體合併到頂層
我有一堆XML文件,有人以他們的無限智慧決定使用標籤將其分解爲多個文件,結果使得調試/編輯它們成爲一個巨大的P-i-t-A。因此,我正在尋找:
- VIM中的一種方法是在單個緩衝區中打開它們(最好是將更改保存在正確的外部實體文件中),或;
- 一種擴展VIM中的文件的方法,以便讀取外部實體並將其替換到緩衝區中,或者;命令行(或.vimrc裏)就這樣做的
- 一個簡單的bash/SED/Python的方式包括在頂層
的文件可能包括新的文件等等對誰知道有多少水平所以這就需要將遞歸...
這裏有什麼頂層文件看起來像一個樣機樣品:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foobar PUBLIC "foobar:dtd" "foobar.dtd" [
<!ENTITY foo SYSTEM "foo.xml">
<!ENTITY bar SYSTEM "bar.xml">
]>
<foo>
<params>
&foo;
</params>
<bar>
&bar;
</bar>
</foo>
編輯: 列表是按優先順序 - 如果沒有1或2的解決方案是可用的,賞金無二的最佳#3 ...
編輯2: 看起來@Gaby的回答作品,但遺憾的是隻有部分,除非我做錯了什麼 - 我會用他的答案寫一些工具,並在這裏發佈以改進。當然,1號或2溶液,將不勝感激... :)
編輯3: 好,最好的非Emacs的-answer將獲得獎金;)
結論 : 感謝@hcayless我現在有一個工作的#2的解決方案,我說:
autocmd BufReadPost,FileReadPost *.xml silent %!xmllint --noent - 2> /dev/null
我.vimrc
,一切都是虎背熊腰,腳蹬dory沒問題。
這可以用xslt完成嗎? – michael 2010-01-08 06:57:13
我以前沒有見過這個,但顯然這是對XML的善良部分。 http://www.xml.com/pub/a/98/08/xmlqna2.html是我找到的一個解釋。 – MikeSep 2010-01-08 22:50:25
是的,這是有效的,因此兩次討厭:) – Kimvais 2010-01-09 07:39:59