如何在php中正确附加xml子元素
我试图迭代一系列电影名称,如下所示。我已经包括了实际输出和预期输出。谢谢如何在php中正确附加xml子元素,php,xml,Php,Xml,我试图迭代一系列电影名称,如下所示。我已经包括了实际输出和预期输出。谢谢 $root = new SimpleXMLElement('<movies/>'); $movies = ['foo', 'bar']; foreach($movies as $movie_name){ $movie_el = buildMovieTag($movie_name); $root->addChild($movie_el->asXML()); } function b
$root = new SimpleXMLElement('<movies/>');
$movies = ['foo', 'bar'];
foreach($movies as $movie_name){
$movie_el = buildMovieTag($movie_name);
$root->addChild($movie_el->asXML());
}
function buildMovieTag($name){
$movie_tag = new SimpleXMLElement('<movie/>');
$movie_tag->addChild('name', $name);
return $movie_tag;
}
$root=新的SimpleXMLElement(“”);
$movies=['foo','bar'];
foreach($movies as$movie\u name){
$movie\u el=buildMovieTag($movie\u name);
$root->addChild($movie_el->asXML());
}
函数buildMovieTag($name){
$movie_tag=新的simplexmlement(“”);
$movie_tag->addChild('name',$name);
返回$movie_标签;
}
我期待着:
<?xml version="1.0"?>
<movies>
<movie><name>foo</name></movie>
<movie><name>bar</name></movie>
</movies>
<?xml version="1.0"?>
<movies><<?xml version="1.0"?> // extra xml tag
<movie><name>foo</name></movie>
/><<?xml version="1.0"?> // extra xml tag
<movie><name>bar</name></movie>
/></movies>
福
酒吧
但我明白了:
<?xml version="1.0"?>
<movies>
<movie><name>foo</name></movie>
<movie><name>bar</name></movie>
</movies>
<?xml version="1.0"?>
<movies><<?xml version="1.0"?> // extra xml tag
<movie><name>foo</name></movie>
/><<?xml version="1.0"?> // extra xml tag
<movie><name>bar</name></movie>
/></movies>
新的simplexmlement然后
asXML()
就是问题所在
addChild足以生成元素,然后其返回值为节点,然后节点上的后续addChild生成子元素
<?php
$root = new SimpleXMLElement('<movies/>');
$movies = ['foo', 'bar'];
foreach($movies as $movie_name) {
$movie = $root->addChild('movie');
buildMovieTag($movie, $movie_name);
}
function buildMovieTag($node, $name) {
$node->addChild('name', $name);
}
echo $root->saveXML();
addChild('movie');
buildMovieTag($movie,$movie\u name);
}
函数buildMovieTag($node,$name){
$node->addChild('name',$name);
}
echo$root->saveXML();
福巴
编辑:如果您的数据更广泛,请将其结构化,使其成为标准的键/值数组,然后在项目上循环。原始问题的实际问题记录在答案的第一行
<?php
$root = new SimpleXMLElement('<movies/>');
$movies = [
['name'=>'foo', 'released' => '2020-12-01 00:00:00', 'plot' => 'foo is a foofoo'],
['name'=>'bar', 'released' => '2020-12-02 00:00:00', 'plot' => 'bar is a barbar'],
];
foreach ($movies as $movie) {
buildMovieTag($root->addChild('movie'), $movie);
}
function buildMovieTag($node, $data) {
foreach ($data as $key => $item) {
// just year from datetime string
if ($key === 'released') $item = date_create($item)->format('Y');
$node->addChild($key, $item);
}
}
echo $root->saveXML();
'foo','released'=>'2020-12-01 00:00:00','plot'=>'foo是一个foo'],
['name'=>'bar','released'=>'2020-12-02 00:00:00','plot'=>'bar是一个barbar'],
];
foreach($movies作为$movie){
buildMovieTag($root->addChild('movie'),$movie);
}
函数buildMovieTag($node,$data){
foreach($key=>$item形式的数据){
//距离日期时间字符串仅一年
如果($key=='released')$item=date\u create($item)->格式('Y');
$node->addChild($key,$item);
}
}
echo$root->saveXML();
结果(手动格式)
福
2020
福是一个福
酒吧
2020
酒吧是个野蛮人
谢谢。我想我可能对我的例子限制太多了。我希望我能够让buildMovieTag
也添加其他类似的子元素:foo2020foobar2019bar
请参见编辑,或者如果您只有名称,那么在buildMovieTag中您需要提取数据