bonjour,
j'ai php 4.3.9 .
j'utilise domxml et xsl pour créer et modifier un fichier xml.
mon fichier xml :
j'essaie de modifier un package.
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<?xml version="1.0" encoding="UTF-8"?> <metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm"> <package> <name>smeserver-ab</name> <arch>i386</arch> <version epoch="0" ver="1.0" rel="1.0"/> <summary>tite ab</summary> <description>description ab</description> <problemes>probleme ab</problemes> <solutions>solution ab</solutions> </package> <package> <name>smeserver-al</name> <arch>noarch</arch> <version epoch="0" ver="1" rel="2"/> <summary>titre al</summary> <description>description al</description> <problemes/> <solutions/> </package> <package> <name>smeserver-gggggggg</name> <arch>noarch</arch> <version epoch="0" ver="1.0" rel="2.2"/> <summary>titre gggggggg</summary> <description>description gggggggg</description> <problemes/> <solutions/> </package> </metadata>
Pour les attributs, cela se passe bien avec set_attribute
Pour les elements, les noms ne sont pas remplaceés mais contaténés avec set_content
mon code
origine :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 <?php if(!$dom = domxml_open_file("primary_xml.xml")) { echo "Erreur lors de l'analyse du document\n"; exit; } # recherche des elements $elements = $dom->get_elements_by_tagname("name"); $arch = $dom->get_elements_by_tagname("arch"); $version = $dom->get_elements_by_tagname("version"); $summary = $dom->get_elements_by_tagname("summary"); $description = $dom->get_elements_by_tagname("description"); $problemes = $dom->get_elements_by_tagname("problemes"); $solutions = $dom->get_elements_by_tagname("solutions"); # recherche du package à modifier $a = 'smeserver-al'; $trouve = ""; for ($i = 0; $i<count($elements); $i++) { $node = $elements[$i]; echo "L'élément[$i] est : " . $node->get_content()."\n"; if( $node->get_content() == $a) { $trouve = $node->get_content(); $nb_trouve = $i; echo "element n° : ".$nb_trouve." Nom : ".$trouve." ok\n"; break; } else { echo "Pas trouvé element : ".$a."\n"; } } if( $trouve == "" ) { echo "Elements : ".$a." non trouve\n"; } else { # récupère elements à modifier $element = $elements[$nb_trouve]; $arch = $arch[$nb_trouve]; $version = $version[$nb_trouve]; $summary = $summary[$nb_trouve]; $description = $description[$nb_trouve]; $problemes = $problemes[$nb_trouve]; $solutions = $solutions[$nb_trouve]; # modification des elemets echo "element : ".$element->get_content()." ok\n"; $attr = $element->set_content("smeserver-alzzzz"); echo "element : ".$element->get_content()." ok\n"; echo "arch : ".$arch->get_content()." ok\n"; $attr = $arch->set_content("i386"); echo "arch : ".$arch->get_content()." ok\n"; echo "version attr epoch : ".$version->get_attribute(epoch)." ok\n"; $attr = $version->set_attribute("epoch", "0"); echo "version attr epoch : ".$version->get_attribute(epoch)." ok\n"; echo "version attr ver : ".$version->get_attribute(ver)." ok\n"; $attr = $version->set_attribute("ver", "1.1"); echo "version attr ver : ".$version->get_attribute(ver)." ok\n"; echo "version attr rel : ".$version->get_attribute(rel)." ok\n"; $attr = $version->set_attribute("rel", "2.1"); echo "version attr rel : ".$version->get_attribute(rel)." ok\n"; echo "sumarry : ".$summary->get_content()." ok\n"; $attr = $summary->set_content("titre alzzzz"); echo "sumarry : ".$summary->get_content()." ok\n"; echo "description : ".$description->get_content()." ok\n"; $attr = $description->set_content("description alzzzz"); echo "description : ".$description->get_content()." ok\n"; echo "problemes : ".$problemes->get_content()." ok\n"; $attr = $problemes->set_content("probleme alzzzz"); echo "problemes : ".$problemes->get_content()." ok\n"; echo "solutions : ".$solutions->get_content()." ok\n"; $attr = $solutions->set_content(""); echo "solutions : ".$solutions->get_content()." ok\n"; } # affichage des modifs à l'écran $xmlfile = $dom->dump_mem(); echo htmlentities($xmlfile); ?>
<package>
<name>smeserver-al</name>
<arch>noarch</arch>
<version epoch="0" ver="1" rel="2"/>
<summary>titre al</summary>
<description>description al</description>
<problemes/>
<solutions/>
</package>
apres modif :
<package>
<name>smeserver-alsmeserver-alzzzz</name>
<arch>noarchi386</arch>
<version epoch="0" ver="1.1" rel="2.1"/>
<summary>titre altitre alzzzz</summary>
<description>description aldescription alzzzz</description>
<problemes>probleme alzzzz</problemes>
<solutions></solutions>
</package>
Pour les attributs, ils sont bien remplacés avec les nouvelles valeurs, pour les elements c'est contaténés.
Si quelqu'un voit le problème...
Je crois que google n'est pas mon ami... cela fait des heures que je cherche!
J'ai trouvé un probleme identique au mien : http://www.developpez.net/forums/arc.../t-178365.html
Mais pas la solution!
Merci
Anne
Partager