Newsgroup: it.comp.www.asp
Titolo: [XML e ASP] Check esistenza nodo

Salve, spero di non essere troppo OT, sono alla prima esperienza con XML e
ho un problemino.
Ho fatto una pagina ASP che riceve via POST un flusso dati in XML, li
interpreta con il Parser MSXML 4 e salva una serie di dati in un file di
testo.
Un esempio dell' XML č questo:
<?xml version="1.0"?>
<Principale>
   <Nome>Pippo</Nome>
   <Cognome>Franco<Cognome/>
   <Articolo>
      <Codice>QQQ</Codice>
      <Pezzi>12</Pezzi>
      <Note>Saponetta</Note>
   </Articolo>
   <Articolo>
      <Codice>SSS</Codice>
      <Pezzi>3</Pezzi>
   </Articolo>
   <Articolo>
      <Codice>CCC</Codice>
      <Pezzi>4</Pezzi>
      <Note>Saponetta</Note>
   </Articolo>
   ...
   ...
</Principale>
Ho una serie di dati certi (Nome, Cognome,..) e un numero imprecisato di
'Articolo' che possono variare in numero.
Il codice che ho utilizzato č piů o meno questo
Set objXML = Server.CreateObject("Msxml2.DOMDocument.4.0")
objXML.async = False
'#### Carico il flusso dati XML arrivato dal POST
objXML.Load request
' #### ciclo per analizzare tutti gli articoli
Set ART = objXML.selectNodes("//Articolo")
For I = 0 to (ART.Length - 1)
 Set COD = ART(I).selectNodes("Codice")
 Set PZ = ART(I).selectNodes("Pezzi")
 Set DESC = ART(I).selectNodes("Note")
 testo = testo & COD(0).text & vbcrlf
 testo = testo & PZ(0).text & vbcrlf
 testo = testo & DESC(0).text & vbcrlf
Next
Il tutto funziona, tranne il caso in cui il nodo 'Note' all'interno di un
'Articolo' non sia presente.
Il mio problema č quindi poter verificare l'esistenza di un nodo prima di
leggere il dato che contiene, č possibile ?
Grazie in anticipo
Umberto Neri

Prova così...
' oppure DESC(0)=Nothing
if IsNull(DESC(0)) then
    testo = testo &" -"
    else
    testo = testo & DESC(0).text & vbcrlf
    end if
--
Ciao,
Andrea Z.

     end if
Purttroppo avevo già provato, solito messagio qualunque controllo provo a
fare a DESC(0), suppongo in quanto non esiste.
---------
Errore di run-time di Microsoft VBScript (0x800A01A8)
Necessario oggetto: 'DESC(...)'
---------
Umberto


Moderatore di it.comp.www.asp - .NET MVP
http://www.aspitalia.com/
 Enjoy the .NET community!
http://www.dev2dev.it/
 La rete ha connesso nuove particelle!

 Umberto
mmmhhh... prova così:
Set ART = objXML.selectNodes("//Articolo")
For I = 0 to (ART.Length - 1)
 Set COD = ART(I).selectNodes("Codice")
 Set PZ = ART(I).selectNodes("Pezzi")
 Set DESC = ART(I).selectNodes("Note")
 testo = testo & COD(0).text & vbcrlf
 testo = testo & PZ(0).text & vbcrlf
 if ART(I).selectNodes("Note").Length>0 then
    testo = testo & DESC(0).text & vbcrlf
    else
    testo = testo &" -"
    end if
Next
--
Ciao,
Andrea Z.

 e di nuovo on error goto 0 se non ti piace trappare l'errore in quel modo.
Non ti smentisci mai, non ci sarei mai arrivato, per la cronaca:
Dim pippo
 on error resume next
  pippo = DESC(0).text            <-- mando in errore non c'è niente da
scrivere
  if err.number=0 then                <-- scrivo solo se non c'è errore
   testo = testo & "Note: "
   testo = testo & DESC(0).text & vbcrlf
  end if
 on error goto 0                <-- rivoglio eventuali errori
Grazie mille !!
Umberto

 Next
Ma sai che funziona, non ci  posso credere, avevo già provato con la
proprità 'Length', ma la utilizzavo su DESC(0) quando probabilmente l'errore
c'era già stato quando ho fatto il Set.
Grazie tantissimo anche a te.
Umberto

 Grazie mille !!
prego :)
sarà anche meglio try...catch, però on error resume next non è malaccio ;)
