2010-01-28 64 views
1

我一直在閱讀關於XML,XSL,XPath等。我想在PHP中使用XML作爲數據庫創建一個簡單的CRUD應用程序來啓動這個小腳本。我將使用SimpleXML,但在閱讀了一些關於stackoverflow的答案之後,似乎很多人都提出了DOMDocument(有沒有什麼比使用DOMDocument更有益於SimpleXML?)XML作爲數據庫

無論如何,困擾我的是如何在他們身上放置一個ID?我應該從「1」開始,然後當有人添加一個節點時,增加它,等等?

還有類,我想提出一個具有這種結構

Parent 
- Children   
- Children 
    - Subchildren 

的我對如何把它放在XML但對我來說問題解析他們的想法。

無論如何,類別並沒有真正打擾我。我更感興趣的是知道是否應該只保留一個保存在XML中的ID計數並將其用作「參考」。

回答

5

你說「XML作爲數據庫」。 XML僅僅是一種標記語言,所以你的真正含義是作爲數據庫」的文件,這將是一個錯誤。你會遇到併發問題,可能的腐敗和大量的其他問題,更不用說大型XML文檔的糟糕表現了。

如果你需要的是一個數據庫,那麼就使用那個:一個數據庫。不是文件。

SQLite易於使用,速度足夠輕負載,雖然它缺乏一個很好的對應phpMyAdmin。否則,你的虛擬主機肯定會提供一個MySQL數據庫。

+0

是的,這是標題中的一個愚蠢的錯誤:)儘管使用某些RDBMS的建議仍然會繼續。不是因爲我是一個固執的人,忽視所有明顯的答案,而是因爲我只是需要嘗試它,它不會是商業產品等,只是測試 – allenskd 2010-01-29 01:26:47

+0

那麼,答案是:SimpleXML,而不是DOM 。如果您需要DOM方法,例如,如果您需要通過ID刪除節點,請嘗試SimpleDOM - http://code.google.com/p/simpledom/ – 2010-01-29 02:02:31

+0

另外,由於您沒有併發控制,因此不要嘗試創建連續的ID並使用PHP的uniqid()代替。 – 2010-01-29 02:05:44

0

國際海事組織我會遠離保持在XML的ID計數。如果你想保留它作爲一個var在腳本中緩存,我認爲這將是好的 - 然後只需在第一次添加該類型的新元素時根據需要對該特定元素進行計數。否則,如果文件中的ID計數實際上不計算元素的ID計數,則可能會有問題。但是,如果這是一個包含多個用戶的應用程序,則您可能正在插入競爭狀態的區域,因爲如果有人在磁盤上寫入任何內容而其他人仍在工作,則可能無法準確計數。您可能想要將計數緩存在簡單的文本文件或其他內容中。

0

嗯,我不會幫你,但我會給你建議:就是不要。與例如SQLLite相比,XML非常慢。爲什麼你想要XML?

+0

這樣的幫助:),因爲我沒有興趣在使用MySQL,SQLite的或任何類型的DBMS希望得到我的手髒與XML的,它使用 – allenskd 2010-01-28 23:13:00

+0

這完全取決於你所需要的/你想要什麼來實現的。如果您需要數據庫,請使用數據庫。如果你想試驗XML,那麼找一個XML是有用和廣泛使用的領域。例如,Web服務。 – 2010-01-28 23:20:29

+0

XML對配置等非常有幫助,但恕我直言,對於「真正的」數據庫不是那麼好的選擇...... – radex 2010-01-29 08:03:59

1

作爲一個練習,這是有趣的,但是每個人都告訴你不要使用XML來做這件事是對的。 RDBMS是您正在閱讀和寫入的存儲的典型最佳解決方案。

至於你的問題,我可能會添加一個id屬性到我關心的有關id的任何節點。然後,如果我使用DOM擴展,我會做setAttribute,或者如果我使用SimpleXML,我會使用addAttribute

但是在PHP中處理XML有更多的解決方案。我會看看很多,看看哪些最適合您的需求。

祝你好運。

+0

我確實知道使用XML來存儲是不好的,但它讓我感到很反感,這就是爲什麼我想要這樣做的原因:) – allenskd 2010-01-29 01:20:47

0

我要去這裏對糧食和說有什麼錯用平面文件數據庫,在這種情況下,XML

的優點和缺點,併爲許多的缺點似乎勢不可擋,以處理和提供建議,平面文件是一個糟糕的路要走。這是一種錯誤,而不是這種泛化。 更具建設性的方法是指出缺點而不是譴責平面文件作爲選項。

平面文件數據庫有一些成功的實現,例如getsimple基於XML的CMS。我想你可能會徘徊在那些代碼中,並且知道他們在用XML做什麼。

我相信,如果更簡單就足夠了,就會使用sql數據庫。一個Sql數據庫也不是破壞或者黑客驗證的,它總是歸結爲實現。

+0

我工作的開發人員使用手動目錄樹,平面文件xml數據庫創建了一個項目。我現在有大約15,000條記錄,但它有時會出現一些奇怪的行爲,並且存儲了100,000多個文件來維護數據。它的荒謬。我會建議使用正式的XML數據庫,而不是做自己的XML文件數據庫。 – djangofan 2010-03-10 17:27:47