Existe-t-il un moyen d'augmenter la taille d'indentation de la propriété DOMDocument formatOutput de PHP? En ce moment, il indent chaque nœud 2 espaces. Je voudrais en faire un onglet ou 4 espaces.Existe-t-il un moyen d'augmenter la taille d'indentation de la propriété DOMDocument formatOutput de PHP?
Répondre
Il peut être possible de modifier la chaîne d'indentation dans libxml, mais à ma connaissance vous ne pouvez pas modifier l'indentation DOM utilise. C'est possible pour XMLWriter cependant.
Comme alternative, vous pouvez utiliser Tidy prettyPrint XML:
$dom = new DOMDocument;
$dom->preserveWhiteSpace = TRUE;
$dom->loadXml('<root><foo><bar> baz </bar></foo></root>');
$tidy = tidy_parse_string($dom->saveXml(), array(
'indent' => TRUE,
'input-xml' => TRUE,
'output-xml' => TRUE,
'add-xml-space' => FALSE,
'indent-spaces' => 4
));
$tidy->cleanRepair();
echo $tidy;
mais notez que ce comportement bizarre dans le cas ci-dessus. Il supprime les espaces dans l'élément barre sauf si vous frappez un xml:space="preserve"
sur l'étiquette de la barre. Quand vous faites cela, il va garder les espaces, mais aussi mettre les nouvelles lignes avant et après. Vous devez jouer avec pour voir si cela correspond à votre problème. Voir Tidy docs
Ce n'est pas une solution très agréable car il dépend de la connaissance que le format est préfixé avec double espaces:
preg_replace_callback('/^(+)</m', function($a) {
return str_repeat(' ',intval(strlen($a[1])/2) * 4).'<';
}, $doc->saveXML());
Il remplace chaque empreinte avec 4 espaces. Ou vous pouvez supprimer le *4
et utiliser "\n"
comme caractère répétitif.
Merci! C'est exactement ce dont j'avais besoin pour changer le retrait de 2 espaces en tabulations, j'ai changé le retour en ceci: 'return str_repeat (" \ t ", intval (strlen ($ a [1])/2)). '<'; – Kus
Y a-t-il un moyen de changer cela quelque part dans un fichier de configuration? Il ne doit pas être à l'exécution. – ThinkingInBits
@Thinking À ma connaissance, il n'y a aucun moyen de configurer cela à partir de PHP. – Gordon