如何在PHP中创建基本XML文件

时间:2016-04-28 18:56:12

标签: php xml

我想在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文件的channelXML

让我们说他们想要添加:

<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 文件难以读取和**它不验证** 。 Validator说:

  

抱歉

     

此Feed无效。

XML
     

...

希望它可以生成多行作为上面的样本class BrokenModel < ActiveRecord::Base validates_with BrokenValidator end class BrokenValidator < ActiveModel::Validator def validate record @record = record check_alerted end private def check_alerted if AtomicGlobalAlerted.new(@record).valid? @record.errors[:base] << "It was alerted recently" end p "check_alerted: #{@record.errors[:base]}" end end class AtomicGlobalAlerted include Redis::Objects attr_accessor :id def initialize id @id = id @fredis = nil Sidekiq.redis do |redis| @fredis = FreshRedis.new(redis, freshness: 7.days, granularity: 4.hours) end end def valid? @fredis.smembers.includes?(@id) end end

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

只是为了保存,您可以使用$xml->asXML('path/filename.xml');

您可以查看此帖子以获得一些帮助Using SimpleXML and DOMDocument Together