Bonjour à tous
Je profite (???) du confinement pour reprendre certaines parties d'un site ancien.
Beaucoup de données sont contenues dans des fichiers XML.
Selon le programme qui a permis d'entrer ou modifier ces données, certaines parties d'un fichier XML sont indentées, d'autres pas.
J'ai essayé de remédier à cela par un programme PHP

$dom = new DOMDocument('1.0', 'utf-8')
$dom -> validateOnParse = $validate;
$dom-> preserveWhiteSpace = false;
$dom -> formatOutput = true;
$dom -> load($filePath);

$dom -> save($filePath);

Je ne constate aucune différence entre le fichier avant et après.
Avez vous une idée sur ce qui cloche?
Merci de votre aide.
Normalement il n'y a rien à faire dans le fichier lui-même. S'il est juste (bien formé), le navigateur l'affichera avec une belle présentation.
Les éditeurs de texte comme le bloc note ne formate pas le fichier. Si tu dois l'éditer manuellement ce sera un problème, mais à ce moment utilise un éditeur plus spécialisé XML.
Hello PapyJP,

J'avais fait ça à une époque, si ça peut te servir ^


function formatXml() {
	
	$str = file_get_contents($TonFichierXML);

	$tab = "\t"
	$formatted = "";
	$indent = "";

	// On sépare les balises de leur contenu
	$str = preg_split("/>\s*</",trim($str));
	
	// Pour chaque partie de l'array obtenu
	// Si c'est une balise on renvoi à la ligne sinon on ajoute une tabulation
	for ( $i=0; $i < count($str); $i++ ) {
	
		$node = trim($str[$i]);
		if (preg_match("/^\/\w/",$node)) $indent = substr($indent,strlen($tab));
		$formatted .= $indent . "<" . $node . ">\r\n";
		if (preg_match("/^<?\w[^>]*[^\/]$/",$node)) $indent .= $tab;
		
	}
	
	// On sauvegarde le fichier formaté
	file_put_contents ($TonFichierXML, trim(substr($formatted,1,strlen($formatted)-4)));

}
Merci de ta réponse
Effectivement c’est la solution à laquelle j’avais pensé faute de mieux, mais j’espérais que formatOutput ferait le job.
stryk a écrit :
Hello PapyJP,

J'avais fait ça à une époque, si ça peut te servir ^


function formatXml() {
	
	$str = file_get_contents($TonFichierXML);

	$tab = "\t"
	$formatted = "";
	$indent = "";

	// On sépare les balises de leur contenu
	$str = preg_split("/&gt;\s*&lt;/",trim($str));
	
	// Pour chaque partie de l'array obtenu
	// Si c'est une balise on renvoi à la ligne sinon on ajoute une tabulation
	for ( $i=0; $i &lt; count($str); $i++ ) {
	
		$node = trim($str[$i]);
		if (preg_match("/^\/\w/",$node)) $indent = substr($indent,strlen($tab));
		$formatted .= $indent . "&lt;" . $node . "&gt;\r\n";
		if (preg_match("/^&lt;?\w[^&gt;]*[^\/]$/",$node)) $indent .= $tab;
		
	}
	
	// On sauvegarde le fichier formaté
	file_put_contents ($TonFichierXML, trim(substr($formatted,1,strlen($formatted)-4)));

}

Merci, c'est ce que je vais faire.
Modifié par Greg_Lumiere (14 Oct 2020 - 12:07)