11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
puoi postare più codice e un esempio di dati xml? Non riesco a capire il contesto.
Indica precisamente che errore ottieni.


if isnull (PEC (i).text) then PEC = 0 else PEC = PEC (i).text end if

PEC è un array ma lo riassegni al numero 0 o a una stringa. Dovresti usare un'altra variabile, specie se usi PEC in un ciclo.

ciao,
Moreno

Enjoy learning and just keep making
10 messaggi dal 09 gennaio 2012
il file xml che vado a leggere ha una struttura base in cui puoi trovare più o meno informazioni in funzione di quanto presente in banca dati.
quindi in un xml puoi trovare che viene indicata la pec, in un altro non c'è la pec ma c'è il capitale che non c'è nell'altro. era per questo che volevo provare con un ISNULL

<?xml version="1.0" encoding="Windows-1252"?>
<blocchi-impresa>
<dati-identificativi f-sede-intercamerale="S" c-fonte="RI" fonte="r" tipo-soggetto="I" descrizione-tipo-soggetto="Sede dell'impresa" tipo-impresa="SC" descrizione-tipo-impresa="SR" dt-iscrizione-ri="16/05/2002" dt-atto-costituzione="02/04/2002" dt-ultimo-protocollo="04/12/2017"
 dt-mod-ultimo-protocollo-evaso="04/12/2017" denominazione="PIPPO" c-fiscale="00000000000" partita-iva="00000000000" c-cciaa-competente="PP" cciaa-competente="PIPPO" cciaa="PP" n-rea="0000">
<stato-attivita c="A">attiva</stato-attivita>
<forma-giuridica c="SR">SR</forma-giuridica>
<info-sede>
<indirizzo-posta-certificata>000000@PEC.IT</indirizzo-posta-certificata>
<dati-iscrizione-rea-rd n-rea="0000"/>
<partita-iva>00000000000</partita-iva>
</info-sede>
</blocchi-impresa>


oppure


<?xml version="1.0" encoding="Windows-1252"?>
<blocchi-impresa>
<dati-identificativi f-sede-intercamerale="S" c-fonte="RI" fonte="r" tipo-soggetto="I" descrizione-tipo-soggetto="Sede dell'impresa" tipo-impresa="SC" descrizione-tipo-impresa="SR" dt-iscrizione-ri="16/05/2002" dt-atto-costituzione="02/04/2002" dt-ultimo-protocollo="04/12/2017"
 dt-mod-ultimo-protocollo-evaso="04/12/2017" denominazione="PIPPO" c-fiscale="00000000000" partita-iva="00000000000" c-cciaa-competente="PP" cciaa-competente="PIPPO" cciaa="PP" n-rea="0000">
<stato-attivita c="A">attiva</stato-attivita>
<forma-giuridica c="SR">SR</forma-giuridica>
<sintesi-cifre-impresa n-localizzazioni="0" n-amministratori="1" n-sindaci="0" n-titolari-cariche="0" n-soci="4" dt-addetti="31/12/2017" n-addetti="1" n-trasferimenti-sede="0" n-trasferimenti-quote="0">
<pratiche-anno dt-inizio="16/05/2017" n="2"/>
<capitale-sociale c-valuta="EU" valuta="EURO">
<deliberato ammontare="10.000,00"/></capitale-sociale></sintesi-cifre-impresa>
</blocchi-impresa>
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non hai postato il codice vbScript quindi dovrò fornire una spiegazione generica.
Hai presente quando un paio di post fa usavi getAttribute?
attributo = SOCI (i).getAttribute("denominazione")


Bene, oltre al metodo getAttribute, che serve ad ottenere il riferimento a un attributo, puoi usare selectSingleNode per ottenere invece il riferimento a un nodo figlio.

Set nodoFiglio = nodoPadre.selectSingleNode("nome-nodo-figlio")
If Not nodoFiglio Is Nothing Then
'nodoFiglio esisteva, quindi possiamo leggere il suo testo
 testo = nodoFiglio.text
End


ciao,
Moreno

Enjoy learning and just keep making
10 messaggi dal 09 gennaio 2012
Scusami, avevo capito che volevi vedere struttura xml.
Si per recuperare valore utilizzo getAttribute
     Anagrafica = ANAGR (i).getAttribute("denominazione") 


quindi questo

  Set ANAGR = objXmlDom.getElementsByTagName("blocchi-impresa/dati-identificativi") 


diventa

Set ANAGR = blocchi-impresa/dati-identificativi.selectSingleNode("ANAGR")
If Not ANAGR Is Nothing Then
'nodoFiglio esisteva, quindi possiamo leggere il suo testo
 testo = ANAGR.text
End

???
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
avevi capito bene, avevo bisogno dell'xml e quello l'ho avuto. Anche se l'esempio hai postato non è well-formed dato che manca il tag di chiusura di dati-identificativi e quindi non posso sapere quali altri tag sono al suo interno. Per me non è un problema ma se le informazioni che mi fornisci sono incomplete o inesatte ci vuole più tempo per arrivare alla soluzione.
Avevo anche bisogno del codice vbscript che stavi usando per leggerlo ma ora l'hai postato quindi ti posso dare una risposta più precisa di quella di prima.

Questa riga non è sintatticamente valida:
Set ANAGR = blocchi-impresa/dati-identificativi.selectSingleNode("ANAGR")

Prova in questo modo:
Set Anagrafiche = objXmlDom.getElementsByTagName("blocchi-impresa")
'Anagrafiche è una COLLEZIONE di nodi, quindi bisogna ciclarli col for o col for each
For Each Anagrafica In Anagrafiche
 'Qui leggo la pec che è contenuta in Anagrafica
 'Nel percorso ho indicato il //, che vuol dire "a qualsiasi livello"
 'Cioè il tag indirizzo-posta-certificata può essere figlio, nipote o pronipote del nodo corrente
  Set NodoPec = Anagrafica.selectSingleNode("//indirizzo-posta-certificata")
  Dim Pec
  If Not NodoPec Is Nothing Then
    'la pec esisteva, quindi possiamo leggere il suo testo
    Pec = NodoPec.text
  End If
  'Qui uso il valore di Pec (che può anche essere Nothing se non era stato trovato)
  'Ad esempio:
  Response.Write(Pec)
Next


ciao,
Moreno
Modificato da BrightSoul il 23 maggio 2018 13.51 -

Enjoy learning and just keep making
10 messaggi dal 09 gennaio 2012
Ma per recuperare tutti i valori faccio così?

Set NodoPec = Anagrafica.selectSingleNode("//indirizzo-posta-certificata")
Set NodoDen = Anagrafica.selectSingleNode("//denominazione")

 Dim Pec
  If Not NodoPec Is Nothing Then
  '  'la pec esisteva, quindi possiamo leggere il suo testo
  Pec = NodoPec.text
  End If
   Response.Write(Pec)& "PEC"

  Dim RAGIONESOCIALE
    If Not NodoDen Is Nothing Then
  RAGIONESOCIALE = NoNodoDen.text
  End If

   Response.Write(RAGIONESOCIALE)& "RAGIONESOCIALE"
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, può andare. Funziona? Quando hai verificato che funziona, se pensi di avere troppo codice duplicato, puoi scriverti una Function tipo questa (ma non ho verificato che sia corretta).
Function OttieniValore(Nodo, NomeTagFiglio)
  Set NodoFiglio = Anagrafica.selectSingleNode("//" & NomeTagFiglio)
  If Not NodoFiglio Is Nothing Then
    Return NodoFiglio.text 
  Else
    Return ""
  End If
End Function 

E la usi così:
Dim Pec
Pec = OttieniValore(Anagrafica, "indirizzo-posta-certificata")

In caso studia la sintassi delle funzioni qui:
http://www.morpheusweb.it/html/manuali/vbscript/vbscript_procedure.asp

La concatenazione qui non va bene:
Response.Write(RAGIONESOCIALE)& "RAGIONESOCIALE"


Correggila così:
Response.Write(RAGIONESOCIALE & "RAGIONESOCIALE")


ciao,
Moreno

Enjoy learning and just keep making
10 messaggi dal 09 gennaio 2012
Ciao BrightSoul
purtroppo non funge

Set NodoPec = Anagrafica.selectSingleNode("//indirizzo-posta-certificata")
Set NodoDen = Anagrafica.selectSingleNode("//denominazione")

 Dim Pec
  If Not NodoPec Is Nothing Then
  '  'la pec esisteva, quindi possiamo leggere il suo testo
  Pec = NodoPec.text
  End If
   Response.Write(Pec)& "PEC"

  Dim RAGIONESOCIALE
    If Not NodoDen Is Nothing Then
  RAGIONESOCIALE = NodoDen.text
  End If

   Response.Write(RAGIONESOCIALE)& "RAGIONESOCIALE"


Riesco a recuperare solo valore pec, non anche Ragionesociale.
Con il codice precedente riuscivo in questo modo

Set ANAGR = objXmlDom.getElementsByTagName("blocchi-impresa/dati-identificativi") 
     RAGIONESOCIALE = ANAGR (i).getAttribute("denominazione")

forse perchè il valore non è text?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.