IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM] Inclure un élément XML au milieu d'une portion de texte


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut [DOM] Inclure un élément XML au milieu d'une portion de texte
    Salut

    Je sens qu'on va me répondre un "Google is your friend" mais tant pis...
    J'aimerais repoduire ceci avec DOMDocument en PHP 5 :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <text:p text:style-name="Standard">
        Deu 
        <text:span  text:style-name="T1">xi</text:span>
        ème paragraphe 
    </text:p>
    C'est de l'OpenDocument, pour les curieux
    Notez que les espaces m'importent peu, c'est le span qui me pose question.


  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Salut Yogui,

    c'est vrai que Google est un ami, mais il lui arrive assez fréquemment de répondre à côté ou carrément de dire des bétises...

    Ce type de structure XML, appelé modèle de contenu mixte, est assez pénible à manipuler avec DOM (avec SimpleXML c'est tout simplement impossible, il faut passer par une conversion vers DOM). Il est constitué de noeuds de type texte entrelacés avec des éléments.

    Pour ton exemple, il faut donc enchaîner createTextNode() + appendChild(), createElement() + appendChild() et enfin createTextNode() + appendChild().

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ok, merci pour ta réponse. Cela fonctionne pour l'écriture, il me reste à voir pour la lecture maintenant... Comme tu l'as dit, SimpleXML ne permet pas de gérer ces noeuds mixtes, d'ailleurs il fait disparaître tout noeud fils dès lors qu'il trouve du contenu texte dans un noeud...

    Pour info, le code suivant permet de créer un document OpenOffice avec un paragraphe et un peu de mise en forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?php
     
    $manifest = new DOMDocument('1.0', 'utf-8');
     
    $XMLManifest = $manifest->createElement('manifest:manifest');
    $XMLManifest->setAttribute('xmlns:manifest', 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0');
    $manifest->appendChild($XMLManifest);
     
    $XMLFileEntry = $manifest->createElement('manifest:file-entry');
    $XMLFileEntry->setAttribute('manifest:media-type', 'application/vnd.oasis.opendocument.text');
    $XMLFileEntry->setAttribute('manifest:full-path', '/');
    $XMLManifest->appendChild($XMLFileEntry);
     
    $XMLFileEntry = $manifest->createElement('manifest:file-entry');
    $XMLFileEntry->setAttribute('manifest:media-type', 'text/xml');
    $XMLFileEntry->setAttribute('manifest:full-path', 'content.xml');
    $XMLManifest->appendChild($XMLFileEntry);
     
     
    $content = new DOMDocument('1.0', 'utf-8');
     
    $XMLDocumentContent = $content->createElement('office:document-content');
    $XMLDocumentContent->setAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0');
    $XMLDocumentContent->setAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0');
    $XMLDocumentContent->setAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0');
    $XMLDocumentContent->setAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0');
    $content->appendChild($XMLDocumentContent);
     
    $XMLAutomaticStyles = $content->createElement('office:automatic-styles');
    $XMLDocumentContent->appendChild($XMLAutomaticStyles);
     
    $XMLStyle = $content->createElement('style:style');
    $XMLStyle->setAttribute('style:name', 'b');
    $XMLStyle->setAttribute('style:family', 'text');
    $XMLAutomaticStyles->appendChild($XMLStyle);
     
    $XMLTextProperties = $content->createElement('style:text-properties');
    $XMLTextProperties->setAttribute('fo:font-weight', 'bold');
    $XMLTextProperties->setAttribute('style:font-weight-asian', 'bold');
    $XMLTextProperties->setAttribute('style:font-weight-complex', 'bold');
    $XMLStyle->appendChild($XMLTextProperties);
     
    $XMLBody = $content->createElement('office:body');
    $XMLDocumentContent->appendChild($XMLBody);
     
    $XMLText = $content->createElement('office:text');
    $XMLBody->appendChild($XMLText);
     
    $XMLParagraph = $content->createElement('text:p');
    $XMLText->appendChild($XMLParagraph);
     
    $XMLText = $content->createTextNode(utf8_encode("Du texte "));
    $XMLParagraph->appendChild($XMLText);
     
    $XMLText = $content->createElement('text:span', utf8_encode("en gras"));
    $XMLText->setAttribute('text:style-name', 'b');
    $XMLParagraph->appendChild($XMLText);
     
    $XMLText = $content->createTextNode(utf8_encode("."));
    $XMLParagraph->appendChild($XMLText);
     
     
    $document = new ZipArchive();
    $document->open('hello-world.odt', ZIPARCHIVE::OVERWRITE);
     
    $document->addFromString('META-INF/manifest.xml', $manifest->saveXML());
    $document->addFromString('content.xml', $content->saveXML());
     
    $document->close();
     
    ?>

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/11/2014, 08h49
  2. Image centrée (left&top) au milieu d'une div de texte
    Par PapyFouras dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 01/02/2010, 15h57
  3. [DOM] Ajout d'élément à un fichier XML
    Par pierre24 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 04/03/2008, 15h21
  4. ajouter élément XML dans fichier existant DOM
    Par Hyst76 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 15/10/2007, 18h27
  5. Copiez coller d'Excel vers Powerpoint au milieu d'une zone de texte
    Par tenaka69 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/08/2007, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo