2010-10-03 84 views
0

一个XML文件,我有一个XML文件,videos.xml读写用PHP

<?xml version="1.0" encoding="ISO-8859-1" ?> 

<videos> 
    <video url="videos/Lillebjorn.f4v" desc="Lillebjørn" /> 
    <video url="videos/Storebjorn.f4v" desc="Storebjørn" /> 
    <video url="videos/Pegasus.f4v" desc="Pegasus" /> 
</videos> 

我在想,我怎么能读取上面的文件,并添加一个新标签<视频URL =“”降序=“”/>与新视频的URL及其对PHP的描述,然后覆盖当前的videos.xml文件,以便使用新标记进行更新。

+0

阅读方法?它是一个远程文件吗? – 2010-10-03 19:09:28

回答

2

使用PHP's DOM functions您可以加载和操作它。

你也可以使用字符串函数手工修改它,DOM可能是一个矫枉过正的地方。

编辑:

假设你已经装载到$xml VAR文件:

$pos = strpos($xml, "</videos>"); 

if ($pos === false) { 
    $xml = substr($xml,0,$pos)."\t<video url=\"$url\" desc=\"$desc\" />".substr($xml,$pos); 
} 

要读取和写入只是检查

+0

该文件在服务器上 – mana 2010-10-03 19:12:22

+0

想知道,这个DOM的东西,我必须安装某种第三方pluging或东西来使用它? – mana 2010-10-03 19:13:20

+0

frisco:你能告诉我如何通过使用字符串函数来做到这一点吗? – mana 2010-10-03 19:16:04

1

我强烈反对将XML作为文本处理的做法。不学习怎么做是错误的,从一开始,并做正确的方式做到这一点是使用DOM处理工具:

SimpleXMLElement - 正如它的名字说 - 这是简单的,或者 DOMDocument - 但对于这个任务SimpleXMLElement会绰绰有余。

以$ videos = simplexml_load_file('videos.xml')开头;您可以修改视频对象,如SimpleXMLElement文档中所述,然后使用file_put_contents('videos.xml',$ videos-> asXML())将其写回到XML文件;

别担心,SimpleXMLElement默认在每个PHP中。

+0

不要误解我的意思,使用DOM操作是优雅的方式,但它需要更多的内存和处理能力来做同样的事情,因此您必须知道每种情况下必须使用的内容。在过去,我使用正则表达式和DOM操作制作了同一个网页剪贴板,第二个更容易阅读和保留,但速度也慢了10倍,甚至遇到了内存问题。 – frisco 2010-10-03 20:13:40

+0

你使用DOMDocument还是SimpleXMLElement?我必须检查这一点,我一直认为正则表达式比XML慢,你让我感到吃惊。 – Harry 2010-10-03 20:30:59

1

在FreeBSD 8上使用PHP5时,默认情况下不包括SimpleXML。*(通过端口安装时)。 以root身份发出以下命令以安装它。 确定是否安装了一个确定的方法是制作一个phpinfo()的脚本,并在您的浏览器中搜索simplexml

cd /usr/ports/textproc/php5-simplexml 
make install clean 

也许还需要重启apache。

希望这可以帮助人们避免秃头。 ;-)