2010-01-28 39 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