Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/07/2007, 19h23   #1
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
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.

__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 11h49   #2
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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().
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 12h47   #3
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
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();
 
?>
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web