我想在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
文件难以读取和**它不验证** 。
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
有什么建议吗?
答案 0 :(得分:1)
只是为了保存,您可以使用$xml->asXML('path/filename.xml');
您可以查看此帖子以获得一些帮助Using SimpleXML and DOMDocument Together。