我使用PHP创建XML文件,这对我来说非常具有挑战性,因为我不是PHP的专家,但输出并不理想。问题:如何创建所需的输出?
澄清:我需要这个,因为此文件将合并到另一个动态创建的XML文件中,其中XML开头标记会导致以下错误:XML declaration allowed only at the start of the document
。
输出:
<?xml version="1.0"?>
<items>
<page description="template4" type="4" duration="5000" on="saturday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="today"/>
</items>
所需的输出:(我知道这不是有效的XML,但根据定义,它仍称为.xml
文件。
<page description="template4" type="4" duration="5000" on="saturday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="today"/>
PHP:
$xmldata = new SimpleXMLElement('<items />');
for ($i=0; $i < count($_POST['data']); $i++) {
$xmlpage = $xmldata->addChild('page');
$xmlpage->addAttribute('description', 'template4');
$xmlpage->addAttribute('type', '4');
$xmlpage->addAttribute('duration', '5000');
$xmlpage->addAttribute('on', $_POST['data']['bday' . $i . '']['when']);
}
$xmldata->asXML('xml/playlistbdays.xml');
我试过了:
$xmldata = new SimpleXMLElement('');
,提出错误说:String could not be parsed as XML
。
答案 0 :(得分:0)
您可以在保存之前替换字符串中的数据:
$str = $xmldata->asXML(); // get as string instead of saving file
$str = str_replace(['<?xml version="1.0"?>','<items>','</items>'],'',$str); // remove tags you don't want.
file_put_contents('xml/playlistbdays.xml', trim($str)) ; // save file
答案 1 :(得分:0)
由于OP的总体目标是合并XML文档(此文件将合并到另一个动态创建的XML文件),请考虑PHP的importNode合并XML文件,而无需删除xml声明头。下面的示例将 items 导入 orders xml:
$input_str = '<?xml version="1.0"?>
<orders>
<order_id>41412</order_id>
</orders>';
$input = new DOMDocument('1.0', 'UTF-8');
$input->loadXML($input_str);
$items_str = '<?xml version="1.0"?>
<items>
<page description="template4" type="4" duration="5000" on="saturday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="sunday"/>
<page description="template4" type="4" duration="5000" on="today"/>
</items>';
$items = new DOMDocument('1.0', 'UTF-8');
$items->loadXML($items_str);
$new_node = $input->importNode($items->documentElement, TRUE);
$input->documentElement->appendChild($new_node);
echo $input->saveXML();
# <?xml version="1.0"?>
# <orders>
# <order_id>41412</order_id>
# <items>
# <page description="template4" type="4" duration="5000" on="saturday"/>
# <page description="template4" type="4" duration="5000" on="sunday"/>
# <page description="template4" type="4" duration="5000" on="sunday"/>
# <page description="template4" type="4" duration="5000" on="sunday"/>
# <page description="template4" type="4" duration="5000" on="today"/>
# </items>
# </orders>