Rimuovere nodo XML con variabile

AlexRock

Nuovo Utente
10 Ott 2008
5
0
0
Salve a tutti!

Alessio, 24 anni, siciliano, abbastanza neofita :)

Riguardo a QUESTO script già postato tra gli articoli di questo sito (cancella un nodo di un xml con un valore specifico).
Mi interessava sapere come posso cancellare un nodo a scelta dell'utente (mediante form), quindi attraverso una variabile ID.
Nell'esempio di cui sopra (dell'ottimo Luca) si elimina sempre il nodo con id "3" (come da esempio riportato sotto).
Cosa occorre modificare per eliminare un nodo con l'id scelto dall'utente?

Intanto preparo un asp con un form così composto:

Codice:
<form action="insevento1.asp" method="post" name="new_user_form">
<table>
<tr>
<td>Id:</td>
<td><input name="id" type="text"></td>
</tr>
</table>
<p><input type="submit" name="submit" value="Invia"></p>
</td>
</tr>
</table>


Quindi nell'asp richiamato (insevento1.asp) cosa devo mettere per eliminare l'id con la variabile "id"?
Per semplicità vi ri-posto l'esempio del vs. co-webmaster Luca con l'id "3":

Codice:
<%@LANGUAGE = VBScript%>
<%
    ' Dichiaro le variabili che mi servono
    Dim file, oggetto, canc

    ' Recupero il file XML
    file = Server.MapPath("database.xml")

    ' Apro l'XMLDOM e carico il file XML
    Set oggetto = Server.CreateObject("Microsoft.XMLDOM")
    oggetto.async = False
    oggetto.load file

    ' Recupero il nodo da cancellare
    Set canc = oggetto.SelectSingleNode("database/record[id='3']")

    ' Cancello fisicamente il nodo dal file XML
    oggetto.documentElement.removeChild(canc)

    ' Salvo le modifiche
    oggetto.Save file

    ' Un po di pulizia...
    Set canc = Nothing
    Set oggetto = Nothing

    ' Lancio un messaggio a video
    Response.Write "Nodo cancellato con successo!"
%>

Grazie e scusate la mia idiotaggine :)
alessio.
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Ciao Alessio, grazie per "ottimo" :)

Nel codice ASP devi recuperare in post (Request.Form) il valore della casella di testo "id" e passarlo in questa riga.

Provo a scrivere il codice mettendo in grassetto le modifiche:

<%@LANGUAGE = VBScript%>
<%
Dim id, file, oggetto, canc
id = Request.Form("id")
If IsNumeric(id) Or id < 1 Then Response.End

file = Server.MapPath("database.xml")
Set oggetto = Server.CreateObject("Microsoft.XMLDOM")
oggetto.async = False
oggetto.load file
Set canc = oggetto.SelectSingleNode("database/record[id='[b]" & id & "[/b]']")
oggetto.documentElement.removeChild(canc)
oggetto.Save file
Set canc = Nothing
Set oggetto = Nothing
Response.Write "Nodo cancellato con successo!"
%>

Non l'ho testato, fammi sapere ;)
 

AlexRock

Nuovo Utente
10 Ott 2008
5
0
0
Che velocità Luca :)

Cmq, ho qualche problema.. e non riesco neanche a capire esattamente quale sia perchè il browser non mi dà errori..

"If IsNumeric(id) Or id < 1 Then Response.End"

Questo significa che se l'id è numerico lo script termina l'esecuzione?

ale.
 
Ultima modifica:

AlexRock

Nuovo Utente
10 Ott 2008
5
0
0
ecco infatti ho tolto il pezzo di stringa "isnumeric" e per adesso funziona :)

Non si può mettere che se è testuale termina lo script?
Com'è la stringa?

ale.
 

AlexRock

Nuovo Utente
10 Ott 2008
5
0
0
Si, fantastico!!! :)

E se per renderlo perfetto mettessimo che se si sceglie un ID inesistente dà un messaggio che dice "id inesistente"?

Sarebbe proprio la ciliegina sulla torta :p

Inoltre, sarebbe fantastico se nell'INSERIRE un nuovo evento nel mio file xml, poco prima del salvataggio si potesse usare un codice per ordinare gli eventi in base all'ID! Sto cercando un pò sulla rete "sort xml id asp" ma trovo ben poco.. più che altro trovo possibilità di ordinare in alfabetico..

Cmq vi posto il codice dell'inserimento evento:

Codice:
		<%

var id = Request.Form("id")
var quando = Request.Form("quando")
var cosa = Request.Form("cosa")

var xmlDoc=Server.CreateObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load(Server.MapPath("app_data/database.xml"));

var nodeList = xmlDoc.getElementsByTagName("database");

if(nodeList.length > 0){

var parentNode = nodeList(0);
var memberNode = xmlDoc.createElement("record");
var idNode = xmlDoc.createElement("id");
var usernameNode = xmlDoc.createElement("quando");
var emailNode = xmlDoc.createElement("cosa");

idNode.text = id;
usernameNode.text = quando;
emailNode.text = cosa;

parentNode.appendChild(memberNode);
memberNode.appendChild(idNode);
memberNode.appendChild(usernameNode);
memberNode.appendChild(emailNode);

xmlDoc.save(Server.MapPath("app_data/database.xml"));

}

Response.Write "Evento inserito con successo!"

%>

ale.
 
Ultima modifica:

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Per la visualizzazione (con ordinamento) puoi usare XSLT:

https://www.mrw.it/xslt/

Per il fatto dell'ID che non esiste puoi fare una cosa, ma devi provare un po.

Mi rifierisco al file .asp.

Prova a modificare cosi:

<%@LANGUAGE = VBScript%>
<%
On Error Resume Next
Dim id, file, oggetto, canc
id = Request.Form("id")
If IsNumeric(id) Or id < 1 Then Response.End
file = Server.MapPath("database.xml")
Set oggetto = Server.CreateObject("Microsoft.XMLDOM")
oggetto.async = False
oggetto.load file
Set canc = oggetto.SelectSingleNode("database/record[id='" & id & "']")
If Err.Number = 0 Then
oggetto.documentElement.removeChild(canc)
oggetto.Save file
Else
Response.Write "Il record " & id & " non esiste"
End If
Set canc = Nothing
Set oggetto = Nothing
Response.Write "Nodo cancellato con successo!"
%>

Se ci fai caso ho gestito gli errori all'inizio, poi ho impostato una condizione: non sono sicuro che la condizione vada impostata esattamente li.

Il senso è che se inserisci un ID inesistente ti da errore; gestendo l'errore, se verifichi che c'è effettivamente errore significa che il record non esiste (e lanci il messaggio) oppure esegui la cancellazione.

Fai qualche test e fammi sapere.

In ogni caso ti consiglio di creare questi applicativi su database: XML è bello e caro, ma il database è più sicuro e malleabile :)

A più tardi!
 

AlexRock

Nuovo Utente
10 Ott 2008
5
0
0
Ti ringrazio enormemente per il tuo preziosissimo aiuto!
Stasera provo anche questa parte dell'id inesistente e ti faccio sapere :)

Si, il database forse è più sicuro.. ma volevo un pò addentrarmi in xml, sembra più veloce, forse meno problematico. Mi piacerebbe proprio creare delle maschere che prendono fonti da più nodi contemporaneamente.. vedremo.. altrimenti torno al caro MySql.

Grazie di tutto!

ale.
 
Discussioni simili
Autore Titolo Forum Risposte Data
Shyson Rimuovere tag dall'url WordPress 6
N Non Autorizzato. Dovresti rimuovere il parametro customize_messenger_channel per visualizzare l'anteprima in frontend. WordPress 1
A Rimuovere span da th HTML e CSS 5
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
Michelebozzo [PHP] Rimuovere pubblicazione nome pagina ... aiuto! PHP 7
Z [PHP] Rimuovere carattere &#65279; PHP 1
C [PHP] rimuovere righe duplicate in un array multidimensionale PHP 1
E Rimuovere "dati in memoria" dopo invio mail [PHP] PHP 18
W Wordpress + woocommerce rimuovere pacchetto prodotti dal conteggio del carrello WordPress 0
A Rimuovere il Marker di Google Maps Javascript 0
L Aggiungere e rimuovere campo input jQuery 3
Devil-94 rimuovere i spazi del file in upload... PHP 1
L rimuovere una sezione nel frontpage di template start point WordPress 2
T Blog su Altervista e Titolo: come rimuovere la parola "Altervista" dalle SERP? SEO e Posizionamento 2
mirko.dagata [VBulletin] Rimuovere vBSEO senza perdere indicizzazione CMS (Content Management System) 0
V Rimuovere una riga <tr> da una tabella Javascript 7
F rimuovere un attributo jQuery 1
blips Rimuovere elementi html con jQuery jQuery 2
M rimuovere immagini da una div Javascript 3
S rimuovere pulsante chiusura (X) da una finestra Javascript 3
D Come faccio a rimuovere questo risultato ARRAY di una pagina: Array ( [0] => 3 ) PHP 2
maxbossi Rimuovere manualmente il virus Flashback da Mac Sicurezza e Virus 0
A Rimuovere active x da pagina - come usare il file swfobject HTML e CSS 0
A Non riesco a rimuovere gli allegati Supporto Mr.Webmaster 0
M [Firewall] Kaspersky 2010: rimuovere blocco applicazione Sicurezza e Virus 2
maxnegri Rimuovere i tag html con php PHP 6
G rimuovere una src Javascript 1
N Problema: rimuovere TrojanDownloader.Win32.IstBar.ag Sicurezza e Virus 1
MarcoGrazia foreign key cancellazione degli alberi figli di un nodo mancante MySQL 0
P Incrementare nodo in ciclo for-each XML 6
G Errore Cannot read property 'childNodes' of undefined per mancanza nodo nel file xml XML 6
felino [VBScript] XML Prendere il Value di un childnode attravervo il nome del nodo Visual Basic 0
T Creare nodo Xml Java 0
L contare nodi figli di un determinato nodo madre XML 0
M Dispositivo BLUETOOTH, PICONET e NODO MASTER?? Reti LAN e Wireless 1
C inserire in un nodo testo un valore creato con una fuction Javascript 17
A Start Nodo Cluster mysql MySQL 0
I funzione js dentro nodo xml Ajax 0
I xml vedere se nodo esiste PHP 0
alessandro1997 [SimpleXML] Problema rimozione nodo PHP 0
D XML DOMDocument, xml nel valore di un nodo PHP 1
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
B Da XML a TXT x4 XML 0
B ciclare file xml con PHP PHP 1
P Rimozione automatica url da sitemap.xml con PHP PHP 1
P Modifica con PHP di un node in una sitemap xml PHP 0
M modificare un file .XML da database Sql PHP 13
T Da xsd a xml ed inserimento dati in excel XML 0
C Problema con dati meteo xml XML 1
R Cerco esperto XML Offerte e Richieste di Lavoro e/o Collaborazione 0

Discussioni simili