charger un xml avec un template xsl en javascript ? [résolu]

charger un xml avec un template xsl en javascript ? [résolu] - XML/XSL - Programmation

Marsh Posté le 21-11-2006 à 13:06:26    

Bonjour,
 
J'ai des fichiers xml, ex :

Code :
  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!DOCTYPE scenario SYSTEM "log.dtd">
  3. <?xml-stylesheet type="text/xsl" href="log.xsl"?>
  4. <scenario name='MAIN_CLONAGE_F06'>
  5.   <connexion login_webintake='LFZ' login_gp='W2J' environnement='02_25_34'/>
  6.   <file type='log' value='tst.log'/>
  7.   <file type='xml' value='tst.xml'/>
  8.   <set variable='m_DATE' value='23.02.04'/>
  9.   <scenario dateExe='2006-10-31_12-06-29' name='INIT_ENV'>
  10.     <option nameGP='SAIENV' title='' id='1' name='SAIENV'>
  11.       <step>
  12.         <actions>
  13.           <field_input type='saisie' option='SAIENV' value='OPCLUX' name='CODE_ENVIRONNEMENT'/>
  14.           <field_input name='DATE_TRAVAIL_FRM' type='saisie' option='SAIENV' value='23.02.04' memory='m_DATE'/>
  15.           <field_input type='passe' option='SAIENV' value='23/02/04' name='DATE_ANOMALIE_FRM'/>
  16.           <field_input type='saisie' option='SAIENV' value='O' name='OK'/>
  17.         </actions>
  18.         <observations/>
  19.       </step>
  20.     </option>
  21.   </scenario>
  22. </scenario>


 
associés à une feuille de style xsl, ex:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:import href="rsc.xsl"/>
  4. <xsl:output method='html' encoding='iso-8859-1'/>
  5. <xsl:template match="/">
  6.   <html>
  7.    <head>
  8.     <link rel="Stylesheet" type="text/css"><xsl:attribute name="href"><xsl:value-of select="$xslpath"/><xsl:value-of select="$xslcss"/></xsl:attribute></link>
  9.     <script language="javascript">xslpath='<xsl:value-of select="translate($xslpath,'\','/')"/>';</script>
  10.     <script language="javascript"><xsl:attribute name="src"><xsl:value-of select="$xslinit"/></xsl:attribute></script>
  11.     <script language="javascript"><xsl:attribute name="src"><xsl:value-of select="$xslpath"/><xsl:value-of select="$xsljs"/></xsl:attribute></script>
  12.    </head>
  13.    <body>
  14.     <br/>
  15.     <table class="host">
  16.      <tr>
  17.       <td class="logo">
  18.        <table class="logo">
  19.         <tr>
  20.          <td class="llogo"><img><xsl:attribute name="src"><xsl:value-of select="$xslpath"/><xsl:value-of select="$xslsgf"/></xsl:attribute></img></td>
  21.          <td class="clogo">xsl:value-of select="/scenario/@name"/></td>
  22.          <td class="rlogo">Log Xml</td>
  23.         </tr>
  24.        </table>
  25.        <table class="link">
  26.         <tr>
  27.  <td class="link"><a class ="menu_off" onclick="newtest()">Nouveau test</a></td>
  28. </tr>
  29.        </table>
  30.       </td>
  31.      </tr>
  32.      <tr>
  33.       <td class="host">
  34.        <table class="sub">
  35.         <tr>
  36.  <td>Scénario : <a target="_blank"><xsl:attribute name="href"><xsl:value-of select="/scenario/@source"/></xsl:attribute><xsl:value-of select="/scenario/@name"/></a></td>
  37.  <td>Exécuté le : <xsl:value-of select="/scenario/@dateExe"/></td>
  38.  <td>Par : <xsl:value-of select="/scenario/connexion/@login_webintake"/>/<xsl:value-of select="/scenario/connexion/@login_gp"/></td>
  39.  <td>Sur : <xsl:value-of select="/scenario/connexion/@environnement"/></td>
  40. </tr>
  41.        </table>
  42.        <br/>
  43.        <table class="sub">
  44.         <tr>
  45.          <td class="e t10">Fichiers joints : </td>
  46.  <td class="t10"><a target="_blank"><xsl:attribute name="href"><xsl:value-of select="/scenario/file[@type='log']/@value"/></xsl:attribute>Log Txt</a></td>
  47.  <td/>
  48.  <td class="t10">
  49.   <form name="options">
  50.    <select id="index" class="list" onchange="jumptoid()">
  51.     <xsl:call-template name="listoption"/>
  52.    </select>
  53.   </form>
  54.  </td>
  55.         </tr>
  56.        </table>
  57.       </td>
  58.      </tr>
  59.      <tr>
  60.       <td class="host">
  61.        <table class="sub">
  62.         <xsl:apply-templates select="*"/>
  63.        </table>
  64.       </td>
  65.      </tr>
  66.     </table>
  67.    </body>
  68.   </html>
  69. </xsl:template>
  70. ...


 
Je voudrais pouvoir avoir un lien dans la page après transformation xslt me permettant de recharger le document xml avec une autre stylesheet xsl qui resemble a la première mais dont les template sont différents.
 
J'ai fait la fonction suivante en javascript mais la transformation ne se fait pas correctement, IE6 m'ouvre une page html correspondant au contenu du <xsl:template match="/"> mais c'est comme si il ne trouvais rien en dessous, aucune requete XPath ne fonctionne ...
 

Code :
  1. function axparserxml(xmlfile,xslfile)
  2. {
  3. var result = window.open('','');
  4. result.document.open("text/html","replace" );
  5. var xml = new ActiveXObject("Microsoft.XMLDOM" );
  6. xml.async = false;
  7. xml.load(xmlfile);
  8. var xsl = new ActiveXObject("Microsoft.XMLDOM" );
  9. xsl.async = false;
  10. xsl.load(xslfile);
  11. result.document.write(xml.transformNode(xsl));
  12. result.document.close();
  13. }


 
Comment obtenir le résultat que je recherche ? Y a t'il une erreur dans mon script ?


Message édité par fifiz le 27-11-2006 à 12:55:30
Reply

Marsh Posté le 21-11-2006 à 13:06:26   

Reply

Marsh Posté le 27-11-2006 à 12:52:53    

après quelques tatonnements cette fonction marche bien et permet de passer des paramètres au fichier xsl :
 

Code :
  1. function XmlTransform(xt_xml,xt_xsl,xt_param)
  2.  {
  3.  // Chargement XML
  4.   var xmldoc = new ActiveXObject("MSXML2.DOMDocument" )
  5.  xmldoc.async = false;
  6.  xmldoc.resolveExternals = true;
  7.  xmldoc.validateOnParse = false;
  8.  xmldoc.load(xt_xml); // alert(xmlfile);
  9.  if (xmldoc.parseError.errorCode != 0)
  10.   {
  11.   error = xmldoc.parseError;
  12.   alert('Error parsing XML file:\n' + error.reason + '[' + error.url + ': line ' + error.line + ', col ' + error.linepos + ']');
  13.   }
  14.  // Chargement XSL
  15.  var xsldoc = new ActiveXObject("MSXML2.FreeThreadedDOMDocument" );
  16.  xsldoc.async = false;
  17.  xsldoc.resolveExternals = true;
  18.  xsldoc.validateOnParse = false;
  19.  xsldoc.load(xt_xsl); // alert(xmlfile);
  20.  if (xsldoc.parseError.errorCode != 0)
  21.   {
  22.   error = xsldoc.parseError;
  23.   alert('Error parsing XSL file:\n' + error.reason + '[' + error.url + ': line ' + error.line + ', col ' + error.linepos + ']');
  24.   }
  25.  // Propriété de transformation
  26.  xsldoc.setProperty('SelectionLanguage','XPath')
  27.  xsldoc.setProperty('SelectionNamespaces','xmlns:xsl="http://www.w3.org/1999/XSL/Transform"')
  28.  var xtemplate = new ActiveXObject("MSXML2.XSLTemplate" );
  29.  xtemplate.stylesheet = xsldoc;
  30.  xprocessor = xtemplate.createProcessor();
  31.  xprocessor.input = xmldoc;
  32.  if (typeof xt_param != 'undefined') {xprocessor.addParameter("param",xt_param);}
  33.  // Transformation
  34.  xprocessor.transform();
  35.  xml2html = xprocessor.output; //alert(xml2htm);
  36.  // Affichage du résultat
  37.  var result = window; //var result = window.open("","" );
  38.         result.document.open();
  39.  result.document.write(xml2html);
  40.         result.document.close();
  41.  }

Reply

Sujets relatifs:

Leave a Replay

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