[resolu] xml et namespace

xml et namespace [resolu] - PHP - Programmation

Marsh Posté le 10-11-2005 à 16:57:59    

youp,
 
 
j'ai un fichier xml:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <root xmlns:xi="http://www.w3.org/2001/XInclude">
  3.    <brol>
  4. <patapouet>
  5.    pouet
  6. </patapouet>
  7.    </brol>
  8.    <modules>
  9. <xi:include href="mod_news.xml">
  10.    <xi:fallback>
  11.       <error>xinclude: mod_news.xml not found</error>
  12.    </xi:fallback>
  13. </xi:include>
  14.    </modules>
  15. </root>


 
je voudrais générer cette partie dynamiquement
 

Code :
  1. <xi:include href="mod_news.xml">
  2.    <xi:fallback>
  3. <error>xinclude: mod_news.xml not found</error>
  4.    </xi:fallback>
  5. </xi:include>


 
pour ca, je fais :
 

Code :
  1. <?
  2. $xpath = new DomXPath($xml);
  3. $xparent = $xpath->query('/root/modules')->item(0);
  4. $xml_string = '<xi:include href="mod_cal.xml"><xi:fallback><error>xinclude: mod_cal.xml not found</error></xi:fallback></xi:include>';
  5. $sxe = simplexml_load_string($xml_string);
  6. $dom_sxe = dom_import_simplexml($sxe);
  7. $dom_sxe = $xml->importNode($dom_sxe, true);
  8. try {
  9. $xparent->appendChild($dom_sxe);
  10. }
  11. catch (Exception $e) {
  12. echo $e;
  13. }


 
-> Erreur:  

Citation :

Warning: namespace error : Namespace prefix xi on include is not defined


 
 
donc j'ajoute:  

Code :
  1. $xml->createAttributeNS("http://www.w3.org/2001/XInclude", "xmls:xi" );


 
mais ca ne change rien :(
 
 
quelqu'un pourrait me guider un peu ?
 
 
merci :)

Message cité 1 fois
Message édité par art_dupond le 10-11-2005 à 22:20:17

---------------
oui oui
Reply

Marsh Posté le 10-11-2005 à 16:57:59   

Reply

Marsh Posté le 10-11-2005 à 18:41:21    

art_dupond a écrit :

-> Erreur:  

Citation :

Warning: namespace error : Namespace prefix xi on include is not defined



Je dirais que c'est normal vu que ton  
$xml_string = '<xi:include href="mod_cal.xml"> ...
n'a aucun namespace de définit vu que c'est juste un bout de XML, donc le parser te lance une erreur ...
mais tu devrais pouvoir le fixer en lui rajoutant son xmlns, mais bon, c'est un peu du brico ...
sinon faut te faire une implémentation DOM complète, qui serait plus complexe mais plus à propos.


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
Reply

Marsh Posté le 10-11-2005 à 21:46:29    

qu'est-ce que tu appelles une implémentation DOM complète ?
 
voilà mon code complet:
 

Code :
  1. $xml = new DOMDocument;
  2. $xml->preserveWhiteSpace = false;
  3. $xml->formatOutput = true;
  4. $xml->load('./layout.xml');
  5. try {
  6. $xml->createAttributeNS("http://www.w3.org/2001/XInclude", "xmlns:xi" );
  7. }
  8. catch (Exception $e) {
  9. echo $e;
  10. }
  11. ############
  12. # ajout modules #
  13. ############
  14. $xpath = new DomXPath($xml);
  15. $xparent = $xpath->query('/root/modules')->item(0);
  16. $xml_string = '<xi:include href="mod_cal.xml"><xi:fallback><error>xinclude: mod_cal.xml not found</error></xi:fallback></xi:include>';
  17. $sxe = simplexml_load_string($xml_string);
  18. $dom_sxe = dom_import_simplexml($sxe);
  19. $dom_sxe = $xml->importNode($dom_sxe, true);
  20. try {
  21. $xparent->appendChild($dom_sxe);
  22. }
  23. catch (Exception $e) {
  24. echo $e;
  25. }
  26. ##########
  27. # xincludage #
  28. ##########
  29. @$xml->xinclude();
  30. #######
  31. # envoi  #
  32. #######
  33. header("Content-Type: text/xml" );
  34. echo $xml->saveXML();


 
 
layout.xml

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <root xmlns:xi="http://www.w3.org/2001/XInclude">
  3.    <brol>
  4.       <patapouet>
  5.           pouet
  6.       </patapouet>
  7.    </brol>
  8.    <modules>
  9.       <xi:include href="mod_news.xml">
  10.           <xi:fallback>
  11.               <error>xinclude: mod_news.xml not found</error>
  12.            </xi:fallback>
  13.       </xi:include>
  14.    </modules>
  15. </root>


 
 
 
edit: je vais peut-être essayer avec cloneNode() ou replaceChild()


Message édité par art_dupond le 10-11-2005 à 21:56:50

---------------
oui oui
Reply

Marsh Posté le 10-11-2005 à 22:17:58    

bon je ne sais pas pourquoi j'ai voulu faire ca comme ca.
 
j'ai enlevé <modules></modules> de layout.xml
 
et j'ai ajouté  
 
<modules xmlns:xi="http://www.w3.org/2001/XInclude">...</modules>
 
dans mon xml_string
 
 
 


Message édité par art_dupond le 10-11-2005 à 22:20:03

---------------
oui oui
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed