Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problemi lettura XML

  1. #1

    Problemi lettura XML

    Ciao a tutti!
    Scusatemi la stupidità (forse) della domanda, ma sono novellina di XML, cerco dappertutto, ma non riesco a capire dove sbaglio...

    L'operazione è semplice: 3 siti "fratelli" ma su server diversi devono interrogare un file XML per vedere se c'è un'offerta attiva e su quale dei 3 siti farla vedere.
    La struttura dell'XML è semplice:

    codice:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <offerte>
    	<offerta id="Offerta Speciale">
    		<immagine src="immagine.jpg" /> 
    		<mostra sito="it" value="true" />
    		<mostra sito="comunicazione" value="false" />
    		<mostra sito="ae" value="true" />
    	</offerta>
    </offerte>
    Problema 1: utilizzando l'XMLDOM e il percorso locale i dati venivano letti correttamente, utilizzando l'XMLHTTP per caricare i dati dagli altri siti, mi veniva riportato l'errore:
    Proprietà o metodo non supportati dall'oggetto: 'objXML.selectNodes' (!!!)

    Problema 2: dopo aver inserito il tag immagine non viene visualizzato più nulla nemmeno con XMLDOM...

    Ecco i codici utilizzati.
    Per la connessione locale:
    codice:
    'Utilizzo oggetto DOM per caricare il file xml
    Set objXML = Server.CreateObject("Microsoft.XMLDOM")
    
    objXML.async = false
    caricoFile = objXML.Load(server.mappath("/mdb-database/offerte.xml"))
    per la connessione remota:
    codice:
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
    
    'Carica il file XML
    objXML.Open "GET", "http://www.miosito.it/mdb-database/offerte.xml", False
    caricoFile = objXML.Send
    Per la lettura dei dati:
    codice:
    Set offerta = objXML.selectNodes("offerta")
    	
    For I = 0 to (offerta.Length - 1)
    	'recupero il titolo dell'offerta
    	titolo = offerta(I).getAttribute("id")
    	Response.Write("<h1>" & titolo & "</h1>" & vbcrlf)
    	'vedo su che siti visualizzare l'offerta
    	Set mostra = offerta(I).selectNodes("mostra")
    	For J = 0 to (mostra.Length-1)
    		Response.Write("
    
    " & vbcrlf)
    		Response.Write("Mostra su " & mostra(J).getAttribute("sito") & ": ")
    		Response.Write(mostra(J).getAttribute("value") & " " & vbcrlf)
    	Next
    	'recupero il percorso dell'immagine dell'offerta
    	immagine = offerta(I).childNodes.item(0).childNodes.getAttribute("src")
    	If immagine <> "" Then
    		Response.Write("[img][/img]" & vbcrlf)
    	End If
    	Response.Write("</p>" & vbcrlf)
    	Set mostra = Nothing
    Next
    	
    Set offerta = Nothing
    Al momento attuale non mi viene visualizzato errore di alcun tipo, ma la pagina è tristemente bianca...
    Avrei bisogno di capire che cosa sbaglio... :S
    Grazie a chi vorrà aiutarmi!

  2. #2
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    se vuoi, magari ci fai anche un bonifico e ti risolviamo il tutto

    scherzo...

    prima di tutto farei un test:


    Set objXML = Server.CreateObject("Microsoft.XMLDOM")
    objXML.async = false
    caricoFile = objXML.Load(server.mappath("/mdb-database/offerte.xml"))

    if not caricofile then
    response.write "nessuna risposta"
    else
    response.write "caricato"
    end if


    Set objXML = nothing

  3. #3
    Dunque...
    ho fatto qualche passo avanti: ora in remoto si vede tutto e i dati vengono caricati correttamente.

    Questo il codice (ripulito di errori):
    codice:
    Set offerta = objXML.selectNodes("//offerta")
    		
    For I = 0 to (offerta.Length - 1)
    
    	'recupero il titolo dell'offerta
    	titolo = offerta(I).getAttribute("id")
    	Response.Write("<h1>" & titolo & "</h1>" & vbcrlf)
    
    	'vedo su che siti visualizzare l'offerta
    	Set mostra = offerta(I).selectNodes("mostra")
    	For J = 0 to (mostra.Length-1)
    		Response.Write("
    
    " & vbcrlf)
    		Response.Write("Mostra su " & mostra(J).getAttribute("sito") & ": ")
    		Response.Write(mostra(J).getAttribute("value") & "</p>" & vbcrlf)
    	Next
    
    	'recupero il percorso dell'immagine dell'offerta
    	immagine = offerta(I).childNodes.item(0).getAttribute("src")
    	If immagine <> "" Then
    		Response.Write("
    
    Immagine caricata: 
    [img][/img]" & vbcrlf)
    	End If
    
    	Set mostra = Nothing
    Next
    		
    Set offerta = Nothing
    Allora ho ritentato la connessione remota, ma non funziona... sembra addirittura che non riesca a leggere il file...
    codice:
    'Inizializziamo il Parser MS XML...
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
    
    'Carica il file XML
    objXML.Open "GET", "http://www.miosito.it/mdb-database/offerte.xml", False
    caricoFile = objXML.Send
    
    if NOT caricoFile then
    	Response.write "
    
    Errore
    : " & objXML.parseError.errorCode & "
    "
    	Response.Write "Linea: " & objXML.parseError.srcText & "/"
    	Response.WRite "Ragione: " & objXML.parseError.reason & "</p>"
    else
     ... ecc ecc
    A questo punto l'errore riportato è il seguente:
    Object doesn't support this property or method: 'objXML.parseError'

    Se gli tolgo il controllo e gli metto direttamente il send, l'errore è questo:
    Object doesn't support this property or method: 'objXML.selectNodes'

    qualche dritta da darmi?...

  4. #4
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    ma perchè utilizzi send e open ?

    caricoFile = objXML.Send

    perchè non usi direttamente il loadXml??


    objXML.async = false
    caricoFile = objXML.LoadXml(percorso_remoto)
    o
    caricoFile = objXML.Load(percorso_remoto)

    per utilizzare il metodo open devi inviare una richiesta xmlhttp...
    il che significherebbe processare una pagina e ottenere la risposta..

    in questo caso il tuo file xml è già formato..
    devi solo raggiungerlo.. non "processarlo"

    facci sapere.. e fai il test con il nuovo metodo..

  5. #5
    ehm...
    avevo letto che per leggere un file su un server diverso fosse necessario il send e load con XMLHTTP...

    comunque ho provato a mettere il percorso remoto nel XMLDOM e, se carico il file su un altro server rispetto quello dove ho l'XML, funziona tutto (!!!) mentre se lo testo sullo stesso server l'errore che mi restituisce è:
    Errore: -2146697209
    Linea: /
    Ragione: Dati non disponibili per la risorsa richiesta.

    ???
    vabbè che non è grave...
    posso usare il percorso assoluto sui siti esterni e quello relativo su quello padre... ma mi piacerebbe capire il perchè di questa differenza di comportamento!

    PS: grazie!

  6. #6
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    perdonami tu, ogni tanto, do i numeri..

    Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
    xmlHttp.Open "GET", URL, false
    xmlHttp.Send()
    XML = xmlHttp.ResponseText

    Set xmlDOM = Server.CreateObject("MSXML2.DomDocument.3.0")
    xmlDOM.async = False
    xmlDOM.validateOnParse = False
    xmlDom.resolveExternals = False

    If not xmlDOM.LoadXml(XML) Then
    ErrorMessage = "errore"

    else

    'parserizza
    End If

  7. #7
    Ora funziona tutto perfettamente sia da locale che da remoto!
    Avevo intuito che mi mancava un passaggio chiave tra il prelievo dei dati e la loro lettura...

    Grazie e mille!

  8. #8
    ciao ragazzi.
    io stò riscontrando il medesimo problema..ma non sono riuscito a risolverlo..

    In pratica se utilizzo questo codice non riesco a caricare nel il file in remoto e ne quello in locale...

    Codice PHP:
    Set xmlDOM Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
    xmlDOM.Open "GET","http://localhost/sito/file.xml"False
    xmlDom
    .Send()
    CaricoFile xmlDom.ResponseText


    Set xmlDOM2 
    Server.CreateObject("MSXML2.DomDocument.3.0")
    xmlDOM2.async False
    xmlDOM2
    .validateOnParse False
    xmlDom2
    .resolveExternals False
    xmlDom2
    .preserveWhiteSpace False


    If not xmlDOM2.LoadXml(CaricoFilethen

    Response
    .write "<div align=""left"">[b]Id Errore[/b]: " xmlDOM.parseError.errorCode "
    "
    Response.WRite "Posizione errore nel file: [b]" xmlDOM.parseError.filePos "[/b]
    "
    Response.Write "Linea Err: [b]"xmlDOM.parseError.line &"[/b]

    Response.WRite "Colonna Err: [b]"xmlDOM.parseError.linePos &"[/b]

    "
    Response.WRite "Linea del codice che causa l&acute;errore: [b]" xmlDOM.parseError.srcText &"[/b]

    "
    Response.Write "Url del File: [b]"xmlDOM.parseError.url &"[/b]


    Response.Write "Descr. Errore: [b]"xmlDOM.parseError.reason &"[/b]
    </div>"


    Else

    ...
    carico i dati...

    .....

    ... 
    ..anzi mi visualizza la pagina di errore..indicando il seguente errore:

    Proprietà o metodo non supportati dall'oggetto: 'parseError'


    Invece se utilizzo questo codice, riesco a leggere il file ma solo in locale..ma non in remoto:

    Codice PHP:
    Set xmlDOM Server.CreateObject("MSXML2.DomDocument.3.0")
    xmlDOM.async False
    xmlDOM
    .validateOnParse False
    xmlDom
    .resolveExternals False
    xmlDom
    .preserveWhiteSpace False


    CaricoFile 
    xmlDom.Load(Server.MapPath("file.xml")) [B]<----il file in locale funziona [/B]

    CaricoFile xmlDom.Load("http://user:pass@sitointernet.com/xml-rpc/pagina_richiesta_con_xml") [B]<----collegandomi in remoto non funziona[/B]


    If 
    Not CaricoFile Then
    Response
    .write "<div align=""left"">[b]Id Errore[/b]: " xmlDOM.parseError.errorCode "
    "
    Response.WRite "Posizione errore nel file: [b]" xmlDOM.parseError.filePos "[/b]
    "
    Response.Write "Linea Err: [b]"xmlDOM.parseError.line &"[/b]

    Response.WRite "Colonna Err: [b]"xmlDOM.parseError.linePos &"[/b]

    "
    Response.WRite "Linea del codice che causa l&acute;errore: [b]" xmlDOM.parseError.srcText &"[/b]

    "
    Response.Write "Url del File: [b]"xmlDOM.parseError.url &"[/b]


    Response.Write "Descr. Errore: [b]"xmlDOM.parseError.reason &"[/b]
    </div>"

    Else

    ...
    estrapolo i dati dal file... 

    Dove è che sbaglio ?!?!
    Hotel a Milano::Cerca il tuo alloggio a milano;
    IBeds::Cerca il tuo alloggio in italia con il cellulare;
    Hotel a Roma::Cerca il tuo alloggio a roma;
    Hotel a Venezia::Cerca il tuo alloggio a venezia;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.