1

可能重复:
如何使用 php 写入现有的 xml 文件

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

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

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

4

2 回答 2

1

正如上面已经提到的 vascowhite,重新考虑 xml 文件的结构。不管怎样,这里有一些代码,它打开 xml 文件,遍历 wei meng lee 部分中的所有可用书籍并打印出它们的标题,然后将新书添加到该部分,最后将文件保存回磁盘。确保 xml 文件可由您的网络服务器执行 php 脚本的用户写入。

//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)

于 2013-01-05T22:09:51.923 回答
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>
于 2013-01-05T22:20:33.283 回答