2008-12-08 60 views
2

何時將信息保存在XML文件中以及何時保存在自己格式的文件中是一個好主意?XML或自己格式的文件?

對於XML(或其它標準)我看到:

  • (+)的標準格式。
  • ( - )手工修改很繁瑣。

對於自己的格式文件,我看到:

  • ( - ),我們需要建立一個自己的解析器(非標)。
  • (+)可以很容易地手動修改文件。
+0

「自己的格式」你的意思是JSON或YAML或一些完全非標準的格式? – 2008-12-08 11:36:09

回答

12
當它是一個不錯的選擇以各種方式

使用XML:

  • 需要這些都是能夠
  • 自然樹形結構
  • 主要數據很容易地處理XML的不同應用程序之間共享以文本形式表示(二進制數據是基於文本格式的一個kludge)
  • 可擴展性很重要
  • 表現不是批評者al(解析XML並不是非常快速 - 儘管如果性能很重要,並且您需要XML,請快速解析器,因爲在最快和最慢之間存在很大差異)
  • 架構可以預先定義並且文檔可以驗證它
  • 更簡單的格式(例如名稱=值對)不要削減它

基本上,如果在XML中有一個相當自然的數據模型表示形式,那可能是處理它的最簡單方法。如果您最終不得不亂用XML來適應它,請考慮其他格式。請注意,除了XML之外,還有很多其他標準(或「有點標準」的格式,例如多平臺上的工具支持)。

1

還記得你擁有所有類型的漂亮XML編輯器,這與模式會給你自動完成,語法檢查和各種現代編輯津貼,其他格式不完全支持

1

( - )手工修改很繁瑣。

我認爲這很大程度上取決於您定義的XML /自己的格式。如果你使用例如一個二進制格式(這可能是非常有效的)幾乎不可能手動編輯文件。

我認爲有其他方面影響的文件格式,如

  • 性能
  • 與其他組件
  • 能力的互操作性手動編輯文件(調試)
  • 向後的選擇兼容性問題

如果您打算使用文本格式,我會在大多數情況下選擇基於XML的解決方案。

0

正如上面指出的那樣,編輯的簡易性並不是一個主要問題:XML編輯器有很多優點(對某些人來說是免費的)。

另一個潛在的問題是冗長,儘管大文件的答案是要將它們gzip:在很多語言中,它幾乎是透明的。

XML在許多方面都很好:標準定義明確(您不必考慮如何定義字符集,如何轉義東西,如何處理特殊情況(多行,二進制等)。 ));它有很多工具(編輯器,解析器,XPath等);與其他工具交換數據是很好的。

如果您的需求非常簡單,只能操作Ascii,自給自足(只有這個應用程序會使用這種格式),也許您可​​以使用其他格式。但是在定義你自己的之前,你可以看一下現有的基於文本的格式,比如Json,Yaml,甚至是Lua(原始數據描述語言)或者非常簡單的需求,Windows的ini格式或Java的屬性。

6

對於XML我看到:

  • (+)標準格式。
  • ( - )手工修改很繁瑣。

    我只在API需要時才使用XML。

對於JSON/YAML我看到:

  • (+)的標準格式。
  • (+)很容易手動修改。

    我幾乎所有的東西都使用JSON/YAML。除了接口需要其他東西時。

對於CSV我看到:

  • (+)標準格式。
  • (+)很容易手動修改。
  • ( - )當列名變得棘手或者數據不是簡單的首字母形式時,它有點模糊。

    我儘可能使用CSV。

對於語言串行器我看到:

  • (+)爲給定的語言標準格式。
  • ( - )幾乎不可能手工修改。

    我偶爾使用序列化文件來在進程間傳遞數據,當我確定雙方都使用相同的語言時。

對於自己的格式文件,我看到:

  • ( - ),我們需要建立一個自己的解析器(非標)。
  • (+)可以很容易地手動修改文件。

    我避免發明自己的文件格式。多年來還沒有發明自己的文件格式。

3

XML爲您提供了XSLT和Xpath的強大功能,您自己的格式不支持。

0

通過順序使用:

  • 屬性文件,如果數據可以被表示爲鍵/值
  • CSV如果數據可以被表示爲一個表
  • XML如果複雜的結構

對我來說XML的缺點可以是解析器的性能,當數據很重要時XML文件的大小可以成爲一個障礙(很多編輯器很難打開幾MB的XML文件)

1

我的經驗法則是:如果我需要轉換或驗證它,或者我將需要與我不控制的應用程序域共享數據,我首先考慮XML,然後如果我不是,我不會。

編輯:

我忘了在一般的文本和Unicode尤其是:如果我的數據的顯著部分是文字(尤其是標記文本),如果我需要支持Unicode(其任何使用文本塊的應用程序通常都會這樣做),它將XML快速移動到列表中。

0

annakata所述,如果您選擇XML路由,則可以使用XSLT和XPATH。我發現,通過巧妙地使用XSLT,您可以創建「自我記錄」配置文件。

通過創建一個.xsl文件並向XML文件中添加這樣的聲明,用戶可以簡單地雙擊XML文件並在其瀏覽器中查看轉換的結果(我知道IE和Firefox都支持這)

<?xml-stylesheet type="text/xsl" href="config-documentation.xsl"?> 

只是認爲這可能會有所幫助。

0

XML通常是我的第一選擇。部分原因是因爲它是我的平臺選擇(.NET)的標準配置文件格式。我發現幾乎完全是定義明確的XML文件比自定義格式更好。我也會避開CSV和平面文件,除非它們是項目的要求。

我對XML作爲我選擇的理由(請注意,有些特定平臺):

  • 標準實現我的平臺。大量的工具可用於處理XML,XSD和XSLT。

  • 模式執行(XSD)。允許我執行文件結構。格式被其他人使用時非常有用。

  • 導航(XPath,Linq到Xml)。易於提取和編寫節點及其屬性。將這種類型的代碼寫在客戶讀者和作者身上的風險較小。

  • Transformable(XSLT)。可以毫不費力地將文件轉換爲其他表示視圖。

  • 可互操作。 XML的結構非常適合描述對象。序列化爲XML的對象很容易移植,並可跨越應用程序邊界生存。

  • 輕鬆編輯。定義明確的XML易於閱讀並易於編輯。一個簡單的文本編輯器就足以開始使用了,並且有許多XML編輯工具可用於各種功能和價格點。

我不明白這樣的看法,即XML比自定義格式更容易手工修改。 XML可能比您想出的格式更冗長,但它提供了與其包含的數據的上下文相關性。如果您可以查看(格式良好的)XHTML,那麼查看XML時並沒有多大區別。

0

這實際上取決於您的數據。

參見ESR的The Art of Unix Programming: Ch. 5 Textuality - Data File Metaformats。以下引用總結:

XML可以是一個簡單的選擇或一個複雜的選擇。圍繞它有很多炒作,但不要不加批判地採納或拒絕它,成爲時尚的受害者。謹慎選擇,並牢記KISS原則。

XML肯定有它的用途,它是精彩表達複雜的分層數據集,但它是矯枉過正,如果你需要做的是存儲半打key:value對,不適合基於行的表格數據。