7
votes

PHP DOM Ajouter un enfant avec une nouvelle ligne

Mon nom Rithy.

Je ne sais pas comment ajouter une nouvelle ligne avant d'ajouter un nouveau noeud ou un nouvel élément dans XML.

mon PHP: xxx

xml avant d'ajouter un nouvel enfant: xxx

xml après ajoutez une nouvelle enfant: xxx

mais je veux: xxx

Merci d'avance !


1 commentaires

Votre question serait beaucoup plus lisible si elle était correctement formatée. Et honnêtement, en cliquant sur le bouton "Code" aurait été beaucoup plus facile à la fin que de remplacer tous les supports d'angle avec des entités HTML et de tout espacer tout.


3 Réponses :


2
votes

Qu'est-ce que vous essayez d'accomplir?

en réglant préserverwhitepace code> à TRUE code> (inutile; c'est la valeur par défaut), vous indiquez libXml de ne pas ignorer les nœuds de texte qui sont composés uniquement d'espace blanc. Pourtant, en même temps, vous essayez de joliment formater le fichier XML, qui nécessite vraiment des nœuds blancheurs. P>

puis ignorant l'espace blanc, vous devez réaliser le blancheur à l'intérieur du code> est significatif; libxml ne les supprimera pas; Si vous forcez une gamme de ligne après Texte 1 code>, dans la ligne suivante, la balise de fermeture seg> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> SEG> doit pas être en retrait, sinon le contenu du nœud texte à l'intérieur de la balise différerait. p>

Votre code me donne ceci: p> xxx pré>

puisque vous disiez que la libxml est significative, il ne peut pas mettre une pause de ligne après la Deuxième SEG> code>, sinon ce serait créer un autre noeud de texte. p>

Si vous dites $ DOM-> PRESERVEWHITESPACE = FAUX; CODE>: xxx pré>

Les balises sont en retrait, mais libxml ne peut toujours pas le faire: p>

<?xml version="1.0" encoding="UTF-8"?>
<body>
  <seg>
    text 1  
  </seg>
  <seg>
    text 2
  </seg>
</body>


1 commentaires

Ok, c'est corrigé par le problème! Merci beaucoup! Pour le texte dans la balise SEG, je pourrais le faire.



11
votes

résumer les réponses données:

  1. Vous devez définir la formatOutput sur TRUE

  2. Vous devez définir Ignorwhitpace sur FALSE

    IE: xxx


0 commentaires

3
votes

solution parfaite. Ça marche. Voici le code que j'ai utilisé:

       //create new document object
        $dom_object = new DOMDocument(); 

        //load xml file
        $xml_file_path = get_template_directory()."/flash/playlist.xml";
        $dom_object->formatOutput = true;    
        $dom_object->preserveWhiteSpace = false;
        $dom_object->load($xml_file_path);    


0 commentaires