J'ai essayé d'utiliser DOMDocument et le code ci-dessous pour générer certaines données de configuration dans un fichier XML en utilisant loadXML(), saveXML() et save(), mais le fichier XML a toujours la structure suivante (notez Configuration/, mais pas Configuration/Configuration ), et je n'arrive pas à faire fonctionner l'indentation XML en utilisant préservationWhiteSpace = false et formatOutput = true. D'où vient "Configuration/" et pourquoi n'y a-t-il pas de clause de clôture après Authentication_Key_2 ?
<?xml version="1.0" encoding="UTF-8"?> <Configuration/> <FullProductName>Text</FullProductName> <Copyright>Text</Copyright> <Version>Text</Version> <Website>Text</Website> <Database_Password>NDE2NDYxNmQ0ODZmNmU2NTZiMzEzOTM4MzE=</Database_Password> <Authentication_Key_1>MDY0ZmRhMDYwYzkxMjVkNzk1M2U4YzUx</Authentication_Key_1> <Authentication_Key_2>ZjllYWFjYmQ5NTEyYmNiNWE4MmYwZj==</Authentication_Key_2>
Le code que j'ai utilisé est le suivant :
//Create the config data structure. $new_config_data = new DOMDocument("1.0", "UTF-8"); $config_xml_element_name[0] = "Configuration"; $config_xml_element_name[1] = "FullProductName"; $config_xml_element_name[2] = "Copyright"; $config_xml_element_name[3] = "Version"; $config_xml_element_name[4] = "Website"; $config_xml_element_name[5] = "Database_Password"; $config_xml_element_name[6] = "Authentication_Key_1"; $config_xml_element_name[7] = "Authentication_Key_2"; $config_xml_element_instance[0] = $new_config_data->createElement($config_xml_element_name[0]); $config_xml_element_instance[1] = $new_config_data->createElement($config_xml_element_name[1], $FullProductName); $config_xml_element_instance[2] = $new_config_data->createElement($config_xml_element_name[2], $ThisProductSoftwareHouse); $config_xml_element_instance[3] = $new_config_data->createElement($config_xml_element_name[3], $ThisProductVersion); $config_xml_element_instance[4] = $new_config_data->createElement($config_xml_element_name[4], $ThisProductWebsite); $config_xml_element_instance[5] = $new_config_data->createElement($config_xml_element_name[5], $_POST['postgresql-password']); $config_xml_element_instance[6] = $new_config_data->createElement($config_xml_element_name[6], $_POST['secret-key1']); $config_xml_element_instance[7] = $new_config_data->createElement($config_xml_element_name[7], $_POST['secret-key2']); //Go through array of config file elements and append them to data structure for ($config_xml_element_id = 0; $config_xml_element_id < count($config_xml_element_instance); $config_xml_element_id++) { //If this is the Root element then append it to config data structure as Root if ($config_xml_element_id == 0) { $new_config_data->appendChild($config_xml_element_instance[0]); //Otherwise append it to config data structure as Child element of Root element } else { $config_xml_element_instance[0] = $new_config_data->appendChild($config_xml_element_instance[$config_xml_element_id]); } } $Config_create_file_path = $_SERVER['DOCUMENT_ROOT'] .$ParentProductRootPath .$ParentProductSubPath .$ThisProductTopPath ."/Application/Config/"; $Config_create_file = ucfirst($ThisProductFilePrependName) ."_config.xml"; $Config_create_file_string = $Config_create_file_path .$Config_create_file; //If the Config directory does not exist then create it if (!file_exists($Config_create_file_path)) { mkdir($Config_create_file_path, 0777, true); } //Save compiled config data structure to XML file $ConfigDataXml = $new_config_data->saveXML(); $new_config_data->preserveWhiteSpace = false; $new_config_data->formatOutput = true; $new_config_data->loadXML($ConfigDataXml); $new_config_data->saveXML(); $config_write = $new_config_data->save($Config_create_file_string);
Vous ajoutez tous les nœuds à la racine du document, il n'y a donc pas de hiérarchie, et le nœud de configuration n'a pas de contenu (il affiche "" car il est vide.
La ligne où je pense que le problème vient est celle à partir de laquelle l'identifiant de l'élément est ajouté après 0...
De nouveaux éléments sont ajoutés à la racine du nouveau document. Pour l'ajouter à un élément de configuration, ajoutez-le à
$config_xml_element_instance[0]
...