Principale utente con più risposte
Scrive un file xml con asp classic

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.
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
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
-
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
- Proposto come risposta Yordan IvanovMicrosoft contingent staff, Moderator mercoledì 19 ottobre 2022 08:18
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
-
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.
- Proposto come risposta Yordan IvanovMicrosoft contingent staff, Moderator mercoledì 19 ottobre 2022 08:23
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
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.
- Proposto come risposta Yordan IvanovMicrosoft contingent staff, Moderator mercoledì 19 ottobre 2022 08:23
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
-
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
-
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
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
-
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.
-
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
- Proposto come risposta Yordan IvanovMicrosoft contingent staff, Moderator mercoledì 19 ottobre 2022 08:18
- Contrassegnato come risposta Yordan IvanovMicrosoft contingent staff, Moderator venerdì 21 ottobre 2022 10:09
-
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.
-
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.
-
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 " 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
-
-
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.