Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    16

    Salvare file xml in Database Mysql tramite php + xslt

    Ciao a tutti ho bisogno di importare un file xml proveniente come risposta dal server rest di flickr in un database su Mysql per fare questo devo usare php + xslt per creare il foglio di stile per la conversione, avete qualche soluzione da suggerirmi?
    gli esempi che ho trovato in rete erano basati su .NET o JAVA2EE ed usavano SAX o altri engine per la gestione / parsing del file xml, voi in php come fareste, forse usando i comandi system() o exec() di php riesco ad eseguire SAX o altro engine o con questi comandi riesco a eseguire i soli comandi "base" della sehell?

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Per importare intendi salvarlo su db?
    Perchè non puoi salvarlo direttamente senza doverlo prima processare con xsl?

    In ogni caso in una sola ricerca ho trovato moltissime informazioni,
    un link su tutti con una spiegazione abbastanza comprensibile qui

    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    16
    Si per imprtarlo intendevo salvarlo nel database
    devo usare per forza xslt perché indicato nelle specifiche del
    Progetto il link che mi hai mandato lavevo già visto e lo usato
    per convertire il file in html ma con la parte di sql ho problemi
    nel settare le info di connessione etc per quello chiedevo se esisteva qualcosa di simile a sax per php

  4. #4
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Attualmente che codice usi per connetterti al db?
    Hai problemi con la query di inserimento?
    E' il risultante html che devi salvare?
    Hai già creato la tabella e i campi?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    16
    Si i dati al database sono settati, ho problemi con la query di inserimento che non è corretta e genera un errore, questo è lo script xslt

    codice:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:sql="org.apache.xalan.lib.sql.XConnection"
    extension-element-prefixes="sql"
    >
    <xsl:param name="driver" select="'com.mysql.jdbc.Driver'"/>
    <xsl:param name="datasource" select="'jdbc:mysql://127.0.0.1:8888/simple_roadinfo'"/>
    <xsl:param name="query" select="'INSERT INTO 'simple_roadinfo'.'ricerca_grezza' 
    'id' ,
    'owner' ,
    'secret' ,
    'server' ,
    'farm' ,
    'title' ,
    'image'
    VALUES 
    '@id', '@owner', '@secret', '@server', '@farm', '@title', '@image'
    '"/>
    <xsl:param name="passwd" select="'passworde del database'"/>
    <xsl:param name="username" select="'go_select'"/>
    
    
    
    <xsl:variable name="db" select="sql:new()"/>
    <xsl:template match="/">
        <xsl:if test="not(sql:connect($db, $driver, $datasource, $username, $passwd))" >
    <xsl:copy-of select="sql:getError($db)/ext-error" />
    <xsl:message terminate="yes">Error Connecting to the Database</xsl:message>
    </xsl:if>
      <html>
      <body>
      <h2>Photos Search</h2>
      <table border="1">
        <tr bgcolor="#9acd32">
          <th align="left">IMAGE</th>
          <th align="left">ID</th>
          <th align="left">OWNER</th>
          <th align="left">SECRET</th>
          <th align="left">SERVER</th>
          <th align="left">FARM</th>
          <th align="left">TITLE</th>
        </tr>
        <xsl:for-each select="photos/photo">
        <tr>
          <td>
          	<img>
          	<xsl:attribute name="alt">
          	<xsl:value-of select="@title" />
          	</xsl:attribute>
          		<xsl:attribute name="src">
          		
          		<xsl:text>http://farm</xsl:text>
          		<xsl:value-of select="@farm" />
          		
          		<xsl:text>.static.flickr.com/</xsl:text>
          		<xsl:value-of select="@server" />
          		
          		<xsl:text>/</xsl:text>
          		<xsl:value-of select="@id" />
          		
          		<xsl:text>_</xsl:text>
          		<xsl:value-of select="@secret" />
          		<xsl:text>_t.jpg</xsl:text>
          		</xsl:attribute>
          	</img>
          </td>
          <td><xsl:value-of select="@id" /></td>
          <td><xsl:value-of select="@owner" /></td>
          <td><xsl:value-of select="@secret" /></td>
          <td><xsl:value-of select="@server" /></td>
          <td><xsl:value-of select="@farm" /></td>
          <td><xsl:value-of select="@title" /></td>
          
        </tr>
        </xsl:for-each>
      </table>
      
      
      </body>
      </html>
    <xsl:value-of select="sql:close($db)"/>
    </xsl:template>
    
    </xsl:stylesheet>
    Il codice è lungo perchè comprente anche la parte che genera l html, praticamente io devo salvare o dati del file html nel database

    Errore riportato: Message: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: XSLT-param: could not compile select expression ''INSERT INTO 'simple_roadinfo'.'ricerca_grezza' 'id' , 'owner' , 'secret' , 'server' , 'farm' , 'title' , 'image' VALUES '@id', '@owner', '@secret', '@server', '@farm', '@title', '@image' ''.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    16
    Ho risolto quasi completamente usando questo codice:

    sql.xslt

    codice:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="text"/>
    
        <!-- TODO customize transformation rules 
             syntax recommendation http://www.w3.org/TR/xslt 
        -->
        <xsl:template match="photos">
            <xsl:apply-templates mode="insert-to-photos" select="photo" />
       </xsl:template>
        
            <xsl:template mode="insert-to-photos" match="photo">
    <xsl:text>INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("</xsl:text>
            <xsl:number />
            <xsl:text>","</xsl:text>
            <xsl:value-of select='@server' />
            <xsl:text>","</xsl:text>
            <xsl:value-of select='@id' />
            <xsl:text>"," </xsl:text>
            <xsl:value-of select='@owner' />
            <xsl:text>","</xsl:text>
            <xsl:value-of select='@secret' />
               <xsl:text>","</xsl:text>
            <xsl:value-of select='@farm' />
               <xsl:text>","</xsl:text>
            <xsl:value-of select='@title' />
            
            <xsl:text>");&#xA;</xsl:text>
    
           
        </xsl:template>
    
    </xsl:stylesheet>
    Che genera una risposta in formato text importabile su database Mysql

    Formato risposta

    codice:
    <?xml version="1.0"?>
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("1","3364","5708266284"," 33698318@N02","72d3ae46fb","4","IMG_3606");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("2","3631","5707689559"," 62601294@N03","ab0038a4ca","4","Untitled");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("3","3527","5708252806"," 40598741@N00","423f1fa37c","4","The Maycat!");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("4","3071","5708263002"," 33698318@N02","9acd36245a","4","IMG_3605");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("5","2458","5707689267"," 58037963@N00","7962fae502","3","Gatta o gallina?");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("6","2107","5708259926"," 33698318@N02","ee00722242","3","IMG_3598");
    INSERT INTO ricerca_grezza (`id_tabella`, `server`, `id`, `owner`, `secret`, `farm`, `title`) VALUES("7","2725","5707691339"," 40598741@N00","f9b36ca2cf","3","The Maycat!")
    Solo 2 cose non mi sono ancora riuscite, eliminare <?xml version="1.0"?> dalla prima linea del file .sql e eseguire direttamente da php il file .sql sto usando codeigniter, se carico il file come parametro in una funzione insert($file = '.\percorso\file.sql') ottengo un errore di sintassi 1064, se copio è incollo il codice generato su phpMyadmin questo non avviene, leggendo su internet sembra sia una "limitazione" di codeigniter e nn sia possibile eseguire più d una query alla volta, effettivamente questo è corretto perchè modificando il file sql e tenendo solo una query di INSERT, il file viene caricato correttamente nel database, qualche soluzione / idea ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.