【发布时间】:2016-04-28 18:56:11
【问题描述】:
我想用 PHP 生成一个基本的XML,并且该文件可以保存在目录中并可以编辑...
这是结构:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id> 1254</id>
<userName>Melanie Woods</userName>
<channel>
<host> www.natgeo.org </host>
<item> http://animals.natgeo.com/feed.xml </item>
<item> http://birds.natgeo.com/feed.xml </item>
</channel>
/////....The can add as many <'channels'> as they want....
/////And as many <'items'>' in the channel as they want
<channel>
<host> www.bbc.com </host>
<item> http://america.bbc.com/feed.xml </item>
<item> http://asia.bbc.com/feed.xml </item>
<item> http://europe.bbc.com/feed.xml </item>
<item> http://australiue.bbc.com/feed.xml </item>
</channel>
</user>
几个小时以来,我已经尝试了很多方法,但仍然无法找出实现这一目标的最佳方法。
挑战在于如何保存文件并在用户考虑添加或删除时调用它 item 或 channel 形成 XML 文件。
假设他们想要添加:
<channel>
<host>www.cnn.com</host>
<item>america.news.cnn.com/fedd.xml</item>
</channel>
他们希望删除:
<item> http://asia.bbc.com/feed.xml </item> 来自bbc.com <channel>
如何拉取文件并添加新的channel?
现在正在尝试的是:
<?php
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><user></user>");
$id= $xml->addChild('id');
$username = $xml->addChild('userName');
for ($i = 1; $i <= 8; ++$i) {
$channel= $xml->addChild('channel');
$channel->addChild('host', 'www.bbc.com');
$channel->addChild('item','http://asia.bbc.com/feed.xml');
} /**/
Header('Content-type: text/xml');
print($xml->asXML());
?>
这可行,但不会保存文件,并且会在瞬间将随机数量的 items 添加到随机数量的 channels 中。
编辑:还有一件事,当运行时,此代码会生成一个单行 XML 文件 难以 阅读并且**它不验证**。
验证者说:
对不起
此提要未通过验证。
line 2, column 0: Undefined root element: user [help] <user><id/><userName/><channel><host>www.bbc.com</host><item>http://asia.bbc...
希望它可以产生多行作为上面的示例XML
有什么建议吗?
【问题讨论】:
-
你试过DOMDocument吗?
-
@MuhammadKashifAbbasi 当然不会介意...关于如何实现类似目标的任何建议?...谢谢!
-
试试这个
$xml->asXML('path/filename.xml');并获得有关 DOMDocument 的帮助,请查看答案