none
Scrive un file xml con asp classic RRS feed

  • Domanda

  • Buonasera Forum, vi scrivo per fugare un dubbio e chiedere supporto.

    Da principiante ho reperito in rete il codice che segue, che ho modificato nella connessione al db access:

    <%
    Dim objXMLdoc
    set objXMLdoc = Server.CreateObject ("Microsoft.XMLDOM")
    ' creo l' "oggetto" che mi permette di costruire il mio documento XML
    objXMLdoc.async = False
    Set objXMLroot = objXMLdoc.createElement("urlset")
    'creo il tag che avrà nome url  e che costituirà la url del mio file XML
    objXMLdoc.appendchild (objXMLroot)
    ' una volta creata la url la  vado a inserire nell'oggeto objXMLdoc
    Dim cnnSimple  ' ADO connection
    Dim rstSimple  ' ADO recordset
    Dim strDSN
    Set cnnSimple = Server.CreateObject("ADODB.Connection")
    'creo una connessione
    'strDSN  = "FILEDSN=Connetti.dsn"
    strDSN  = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/mdb-database/nazioni.mdb")
    ' utilizzo una connessione ODBC creata sulla mia macchina per accedere al database
    ' tuttavia per questo esempio qualsiasi connessione va bene basta poter scorrere il ' ' ' ' recordset
    cnnSimple.Open strDSN
    Set rstSimple = cnnSimple.Execute("SELECT * FROM nazioni")
    'eseguo una select per estrarre dalla tabella nazioni tutti i record
    
    Do While Not rstSimple.EOF
    'faccio un ciclo per leggere tutti i dati
    Set figlio2 = objXMLdoc.createnode ("element" , "titolo"  ,"" )
    ' per ciascun campo del record creo il tag  "titolo "
    figlio2.text = rstSimple.Fields("titolo").Value
    ' scrivo il dato estratto dal record ossia il nome della titolo tra i tag titolo
    figlio2.setAttribute  rstSimple.Fields("id_titolo").name, _
    rstSimple.Fields("id_titolo").Value
    
    'creo l'attributo del tag titolo  dandogli e gli assegno il valore estratto dal campo 'id_titolo
    objXMLdoc.documentElement.appendChild (figlio2)
    'aggiungo il tag creato al documento XML
    Set figlio2 = nothing
    rstSimple.MoveNext
    ' continuo a ciclare fino a quando non ho passato tutti   i record
    Loop
    
    objXMLdoc.Save Server.MapPath ("sitemap.xml")
    'salvo il documento con il nome costruito ed estensione xml
    Set figlio = nothing
    Set objXMLdoc =nothing
    rstSimple.Close
    Set rstSimple = Nothing
    cnnSimple.Close
    Set cnnSimple = Nothing
    %>

    Vorrei sapere se il risultato è conforme alle specifiche xml di una sitemap, dopo averlo lanciato a video mostra:

    <urlset>
    <titolo id_titolo="1">francia</titolo>
    <titolo id_titolo="2">spagna</titolo>
    <titolo id_titolo="3">italia</titolo>
    </urlset>

    Se idoneo vorrei il vostro aiuto per inserire nel nodo due righe precisamente i tag <url>, <loc> e <descrizione>

    Ringrazio anticipatamente chi vorrà aiutarmi.

    giovedì 13 ottobre 2022 18:58

Risposte

  • Ciao Valerio,
    ma asp classic non è un po' troppo obsoleto?

    Comunque per restituire una file xml puoi farlo seguendo questo articolo:
    https://www.mrw.it/asp/creare-file-xml-classic-asp_7018.html

    Ciao


    Paolo Pranzo

    lunedì 17 ottobre 2022 08:07
  • Ok,
    quindi tu vorresti creare dinamicamente il file sitemap.xml giusto?
    Se così puoi tranquillamente impostare la tua sitemap con un indirizzo che termina con .asp, ad esempio:
    miosito.xx/sitemap.asp

    Altrimenti, se il tuo obiettivo fosse quello di avere proprio "sitemap.xml" dovresti realizzare un handler.
    La strada più semplice è quella di farlo direttamente in .net, con qualche ricerca ne trovi diversi esempi.


    Paolo Pranzo

    lunedì 17 ottobre 2022 19:05
  • Buongiorno, Valerio, 

    <url>: per quanto riguarda <url>, potresti usare CDATA;

    <loc>:  dipende, che cosa vorresti ottenere come risultato;

    <descrizione>:  ...?

    ecco un esempio di codice che, comunque, ti sarà utile aggiungere:

    // Aggiunge un nodo di testo all'elemento
    element.appendChild(doc.createTextNode("D"));
    
    // Aggiunge un nodo di testo all'inizio dell'elemento
    element.insertBefore(doc.createTextNode("A"), element.getFirstChild());
    
    // Aggiunge un nodo di testo prima dell'ultimo figlio dell'elemento
    element.insertBefore(doc.createTextNode("C"), element.getLastChild());
    
    // Aggiungi un altro elemento dopo il primo figlio dell'elemento radice
    Elemento element2 = doc.createElement("elemento");
    element.insertBefore(element2, element.getFirstChild().getNextSibling());
    
    // Aggiunge un nodo di testo davanti al nuovo elemento dell'elemento
    element2.getParentNode().insertBefore(doc.createTextNode("B"), element2);

    Poi, c'e qquesto sito, che potrebbe darti tanti dettagli sul xml, sitemap ecc.:

    All About Sitemaps - Quick Guide


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 14 ottobre 2022 13:31
    Moderatore

Tutte le risposte

  • Buongiorno, Valerio, 

    <url>: per quanto riguarda <url>, potresti usare CDATA;

    <loc>:  dipende, che cosa vorresti ottenere come risultato;

    <descrizione>:  ...?

    ecco un esempio di codice che, comunque, ti sarà utile aggiungere:

    // Aggiunge un nodo di testo all'elemento
    element.appendChild(doc.createTextNode("D"));
    
    // Aggiunge un nodo di testo all'inizio dell'elemento
    element.insertBefore(doc.createTextNode("A"), element.getFirstChild());
    
    // Aggiunge un nodo di testo prima dell'ultimo figlio dell'elemento
    element.insertBefore(doc.createTextNode("C"), element.getLastChild());
    
    // Aggiungi un altro elemento dopo il primo figlio dell'elemento radice
    Elemento element2 = doc.createElement("elemento");
    element.insertBefore(element2, element.getFirstChild().getNextSibling());
    
    // Aggiunge un nodo di testo davanti al nuovo elemento dell'elemento
    element2.getParentNode().insertBefore(doc.createTextNode("B"), element2);

    Poi, c'e qquesto sito, che potrebbe darti tanti dettagli sul xml, sitemap ecc.:

    All About Sitemaps - Quick Guide


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 14 ottobre 2022 13:31
    Moderatore
  • Grazie per la cortese risposta, mi accorgo di essere fuoristrada i tag generati dal codice che ho postato prelevano i dati dal DB Access infatti <titolo> è un campo del db.

    Io ho un db diverso che non posso modificare e il risultato atteso che estraggo con una pagina sitemap.asp è il seguente:

    <urlset
          xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
          xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://www.sitemaps.org/schemas/sitemap/0.9
                https://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <!--Url Extract: 1-->
    <url>
      <loc>https://www.miosito.it/</loc>
      <priority>1.00</priority>
      <lastmod><script src="include/js/data.js"></script></lastmod>
      <changefreq>always</changefreq>
    </url>
    
    <%
    Set rs = Server.CreateObject("Adodb.Recordset")
    Sorgu = "select * from tblnews order by News_ID desc"
    rs.Open Sorgu, strCon, 1, 3
    while not rs.eof
    %>
    
      <url>
        <loc>https://www.miosito.it/page.asp?id=<%=rs("News_ID")%></loc><br>
        <Titolo><%=rs("News_title")%></Titolo><br>
        <Descrizione><%=rs("Short_news")%></Descrizione><br>
        <priority>0.80</priority>   
      </url>
    
    <%rs.movenext
      wend%>
    
    </urlset>
    Purtroppo i motori di ricerca leggono solo i file xml. Non ho idea di come dire alla pagina asp scrivi il file xml, puoi aiutarmi?

    • Modificato ValerioT domenica 16 ottobre 2022 17:09
    venerdì 14 ottobre 2022 18:48
  • Ciao Valerio,
    ma asp classic non è un po' troppo obsoleto?

    Comunque per restituire una file xml puoi farlo seguendo questo articolo:
    https://www.mrw.it/asp/creare-file-xml-classic-asp_7018.html

    Ciao


    Paolo Pranzo

    lunedì 17 ottobre 2022 08:07
  • Grazie per la gentile risposta Paolo.

    Si certo il linguaggio è obsoleto ma il sito a cui sto approcciando è scritto in asp. Mi è stato chiesto se sono in grado di farlo meglio indicizzare e cercando su internet ho letto che allo scopo servono i meta nelle pagine che non c'erano, e, il file sitemap.xml.

    Nel primo caso facilmente ho risolto, ma nel secondo mi sono bloccato. Riesco a scrivere un file con estensione *.asp, come nel tuo esempio e nel mio post precedente, ma non riesco a far scrivere un file *.xml dinamico.

    Forse sto sbagliando approccio.

    lunedì 17 ottobre 2022 15:59
  • Ok,
    quindi tu vorresti creare dinamicamente il file sitemap.xml giusto?
    Se così puoi tranquillamente impostare la tua sitemap con un indirizzo che termina con .asp, ad esempio:
    miosito.xx/sitemap.asp

    Altrimenti, se il tuo obiettivo fosse quello di avere proprio "sitemap.xml" dovresti realizzare un handler.
    La strada più semplice è quella di farlo direttamente in .net, con qualche ricerca ne trovi diversi esempi.


    Paolo Pranzo

    lunedì 17 ottobre 2022 19:05
  • Buongiorno, Valerio, 

    La risposta di Paolo e la mia, hanno aiutato?


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    mercoledì 19 ottobre 2022 08:23
    Moderatore
  • consideriamo il thread risolto. OP non risponde da giorni.

    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 21 ottobre 2022 10:09
    Moderatore
  • Buonasera Paolo e Yordan, siete stati molto utili in questi giorni non riuscivo a rispondere con nessun browser e ho ultilizzato il tempo a disposizione per migliorare quanto in precedenza mostrato.

    Alla fine poichè la pagina è dinamica ho rinunciato alla costruzione della pagina xml come consigliato da Paolo e ho inserito nel file robots.txt la pagina con estensione *.asp, che, come ha detto viene letta lo stesso da Google per indicizzare il sito.

    Pongo due quesiti:

    Il response.ContentType genera encoding error con i caratteri non ammessi quando ultilizzo UTF-8 c'è un modo per scrivere in questa pagina codice asp per sostituire i caratteri speciali come per esempio “ con &#34; ecc. ecc. Ho visto navigando che è possibile farlo in js, non credo sia però una soluzione ottimale.

    Un'ultima cortesia ho fatto parecchie prove in questi giorni, il codice che segue contiene errori o aree di miglioramento?

    Grazie per l'attenzione

    <%
    Set adoCon = Server.CreateObject("ADODB.Connection")
    strCon = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/mdb-database/news.mdb")
    'adoCon.Open strCon
    %>
    <%
    response.ContentType = "text/xml"
    %>
    <%
    Set rs = Server.CreateObject("Adodb.Recordset")
    Sorgu = "select * from tblnews order by News_ID desc"
    rs.Open Sorgu, strCon, 1, 3
    %>
    <%
    'response.write("<?xml version='1.0' encoding='UTF-8'?>")&VbCrLf
    response.write("<?xml version='1.0' encoding='iso-8859-1'?>")&VbCrLf
    response.write("<urlset>")&VbCrLf
    while (not rs.EOF)
    response.write("<url>")&VbCrLf
    response.write("<loc>" & "http://www.miosito.it/page.asp?id=" & rs("News_ID") & "</loc>")&VbCrLf
    response.write("<titolo>" & rs("News_title") & "</titolo>")&VbCrLf
    response.write("<descrizione>" & rs("Short_news") & "</descrizione>")&VbCrLf
    response.write("</url>")&VbCrLf
    rs.MoveNext()
    wend
    %>
    <%
    rs.close()
    response.write("</urlset>")
    %>



    • Modificato ValerioT lunedì 24 ottobre 2022 21:00
    lunedì 24 ottobre 2022 20:34
  • forse ho trovato il metodo, dopo

    response.write("<urlset>")&VbCrLf

    posso scrivere:

    document.write(Replace(""", """, "&#34;"))

    e ripeterlo per tutti i caratteri speciali.

    Ci proverò domani.

    lunedì 24 ottobre 2022 20:57
  • Salve, Valerio, 

    Visto che il thread e' risolto, vorrei chiedere che i due quesiti nuovi, siano postati in nuovi thread, secondo le regole del forum. 


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 25 ottobre 2022 15:30
    Moderatore