写入现有的XML文档

时间:2013-01-05 21:26:44

标签: php xml simplexml

  

可能重复:
  how to write into existing xml file using php

我正在尝试使用SimpleXML写入现有的XML文件(就像Matthew在how to write into existing xml file using php中说的那样),除了我的XML文件有更多的项目(这不是我的XML文件的实际结构,我我只是以它为例)。

<Books>
<Authors>
    <WeiMengLee>
        <Book>Beginning iOS 4 Application Development</Book>
    </WeiMengLee>
</Authors>
</Books>

所以我的问题是,如何在PHP中使用SimpleXML向“WeiMengLee”项添加新的“Book”?

2 个答案:

答案 0 :(得分:1)

作为vascowhite已经在上面说过,重新考虑你的xml文件的结构。无论如何,这里有一些代码,打开xml文件,遍历wei meng lee部分中的所有可用书籍并打印出他们的标题,然后在该部分添加一本新书,最后将文件保存回磁盘。确保web服务器执行php脚本的用户可以写入xml文件。

//read info from xml file to structured object
$xml = new SimpleXMLElement('bla.xml', null, true);

//loop all available books for wei meng lee
foreach( $xml->Authors->WeiMengLee->Book as $book)
{
    //print book title + newline
    print $book . "<br />";
}

//add a new book entry to your xml object
$xml->Authors->WeiMengLee->addChild("Book", "HERE GOES THE TITLE");

//save the changes back to the xml file
//make sure to set proper file access rights 
//for bla.xml on the webserver
$xml->asXml('bla.xml');

希望这有助于8)

答案 1 :(得分:0)

您需要确定您的xml是关于书籍还是关于作者。

如果是书籍,那么它应该是这样的: -

<?xml version="1.0"?>
<books>
    <book>
        <title>Beginning iOS 4 Application Development</title>
        <author>WeiMengLee</author>
    </book>
</books>

然后你可以添加这样一本新书: -

$xml = new SimpleXMLElement("filename.xml", null, true);

$book = $xml->addChild('book');
$book->addChild('title', 'Another Book');
$book->addChild('Author', 'WeiMengLee');
$xml->asXML('filename.xml');

输出: -

<?xml version="1.0"?>
<books>
    <book>
        <title>Beginning iOS 4 Application Development</title>
        <author>WeiMengLee</author>
    </book>
    <book>
        <title>Another Book</title>
        <Author>WeiMengLee</Author>
    </book>
</books>

另一方面,如果你的xml是关于作者的,那么它应该是这样的: -

<?xml version="1.0"?>
<authors>
    <author>
        <name>WeiMengLee</name>
        <books>
            <book>Beginning iOS 4 Application Development</book>
        </books>
    </author>
</authors>

你会添加另一本书: -

$xml = new SimpleXMLElement("filename.xml", null, true);

foreach($xml as $author){
    if($author->name == 'WeiMengLee'){
        $weimenglee = $author;
    }
}

$weimenglee->books->addChild('book', 'Another book');

$xml->asXML('filename.xml');

输出: -

<?xml version="1.0"?>
<authors>
    <author>
        <name>WeiMengLee</name>
        <books>
            <book>Beginning iOS 4 Application Development</book>
            <book>Another book</bmook>
        </books>
    </author>
</authors>