Discussione:
xml con visual basic 6
(troppo vecchio per rispondere)
Lorenzo1981
2005-06-21 20:48:13 UTC
Permalink
Salve volevo sapere come fare a leggere un file xml formato in questa
maniera
<?xml version="1.0" encoding="iso-8859-1"?>
<tag1>
<tag2>
<tag3>
<file1=1 descrizione immagine="imm1.jpg" \>
<file2=2 descrizione immagine="imm2.jpg" \>
</tag3>
</tag2>
</tag1>

In pratica io vorrei riuscire a mettere in una listbox numero e
descrizione
l'immagine corrispondente di fianco e sotto la descrizione (per intenderci
vorrei fare una sorta di catalogo che visualizzi l'immagine e la
descrizione
della selezione )

Ciao e grazie
Ps. Vi chiedo se qualcuno può aiutarmi o almeno indirizzarmi verso qualche
esempio inquanto mi trovo incasinato ad avere
<file1=1 descrizione immagine="imm1.jpg" \>
e non
<file1> descrizione immagine="imm1.jpg"<\file1>
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
ma81x
2005-06-22 07:17:44 UTC
Permalink
L'XML che riporti è sbagliato.

Prova con:

<file id="1" descrizione="la descrizione che vuoi" immagine="imm1.jpg"
/>

Ciao.
Lorenzo1981
2005-06-22 07:23:06 UTC
Permalink
Post by ma81x
L'XML che riporti è sbagliato.
<file id="1" descrizione="la descrizione che vuoi" immagine="imm1.jpg"
/>
Ciao.
Il problema non è come è formato l'xml (si hai ragione è così formato) ma
vorrei un esempio o uno stralcio di codice che mi permetta di leggere
all'in terno di quel xml i campi che mi servono..Mi puoi aiutare?
CIao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 07:35:45 UTC
Permalink
Post by Lorenzo1981
Il problema non è come è formato l'xml (si hai ragione è così
formato) ma vorrei un esempio o uno stralcio di codice che mi
permetta di leggere all'in terno di quel xml i campi che mi
servono..Mi puoi aiutare?
http://www.google.com/search?num=50&hl=en&lr=&biw=971&q=microsoft+xml+parser+example+visual+basic

Questo e' bello completo:

http://www.topxml.com/xml/articles/xmlvbasp/

Alla fine ci trovi esempi di codice.

HTH,

*
Lorenzo1981
2005-06-22 08:02:28 UTC
Permalink
Post by *Alessandro*
Post by Lorenzo1981
Il problema non è come è formato l'xml (si hai ragione è così
formato) ma vorrei un esempio o uno stralcio di codice che mi
permetta di leggere all'in terno di quel xml i campi che mi
servono..Mi puoi aiutare?
http://www.google.com/search?num=50&hl=en&lr=&biw=971&q=microsoft+xml+parser+example+visual+basic
Post by *Alessandro*
http://www.topxml.com/xml/articles/xmlvbasp/
Alla fine ci trovi esempi di codice.
HTH,
*
Quindi lasciando stare per un attimo com'è formato l'xml (ce l'ho già il
file..ho sbagliato io a scriverne il contenuto visto che l'ho fatto a
memoria e non l'avevo sotto mano..)mi interessa proprio la parte di codice
cioè librerie.. oggetti e tutto quello che devo caricare.Insomma un
esempio di come fare in Visual basic a fargli leggere quel file xml e
trovare i campi
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 08:18:41 UTC
Permalink
Post by Lorenzo1981
Quindi lasciando stare per un attimo com'è formato l'xml (ce l'ho già
il file..ho sbagliato io a scriverne il contenuto visto che l'ho
fatto a memoria e non l'avevo sotto mano..)mi interessa proprio la
parte di codice cioè librerie.. oggetti e tutto quello che devo
caricare.Insomma un esempio di come fare in Visual basic a fargli
leggere quel file xml e trovare i campi
http://www.google.com/search?num=50&hl=en&lr=&biw=971&q=microsoft+xml+parser+example+visual+basic
Post by Lorenzo1981
Post by *Alessandro*
http://www.topxml.com/xml/articles/xmlvbasp/
Alla fine ci trovi esempi di codice.
Ciaotutti,

* - e le risposte retroattive
Lorenzo1981
2005-06-22 09:51:29 UTC
Permalink
Post by *Alessandro*
Post by Lorenzo1981
Quindi lasciando stare per un attimo com'è formato l'xml (ce l'ho già
il file..ho sbagliato io a scriverne il contenuto visto che l'ho
fatto a memoria e non l'avevo sotto mano..)mi interessa proprio la
parte di codice cioè librerie.. oggetti e tutto quello che devo
caricare.Insomma un esempio di come fare in Visual basic a fargli
leggere quel file xml e trovare i campi
http://www.google.com/search?num=50&hl=en&lr=&biw=971&q=microsoft+xml+parser+example+visual+basic
Post by *Alessandro*
Post by Lorenzo1981
Post by *Alessandro*
http://www.topxml.com/xml/articles/xmlvbasp/
Alla fine ci trovi esempi di codice.
Ciaotutti,
* - e le risposte retroattive
Allora Io volevo poter leggere un file xml da usare come catalogo per dei
film..
Se uso un xml così formato
<Contents>
<Movie Number="1"
Checked="True"
Date="21/06/2005"
Rating="8.5"
OriginalTitle="The Matrix"/>
<Movie Number="2"
Checked="True"
Date="21/06/2005"
Rating="6.5"
OriginalTitle="The Matrix Reloaded"/>
</Contents>
Riesco a leggere in questo modo e mettere Number e OriginalTitle nel
listbox..

Private xmlDoc As DOMDocument
Private Sub Form_Load()
Dim xmlChildNode As IXMLDOMNode
Set xmlDoc = New DOMDocument
xmlDoc.Load (App.Path & "/prova.xml")
For Each xmlChildNode In xmlDoc.documentElement.childNodes
mess = xmlChildNode.Attributes.getNamedItem("Number").Text + " " +
xmlChildNode.Attributes.getNamedItem("OriginalTitle").Text
lstNames.AddItem mess
Next
End Sub

Come devo fare per poter leggere invece un xml così formato:

<?xml version="1.0" encoding="iso-8859-1"?>
<AntMovieCatalog Format="35" Version="3.5.0 (2005-05-29)" Date="21/06/2005
21.55.51">
<Catalog>
<Properties/>
<Contents>
<Movie Number="1" Checked="True" Date="21/06/2005" Rating="8.5"
OriginalTitle="The Matrix"/>
<Movie Number="2" Checked="True" Date="21/06/2005" Rating="6.5"
OriginalTitle="The Matrix Reloaded"/>
</Contents>
</Catalog>
</AntMovieCatalog>

In pratica avere più valori su una stessa riga mi incasina tutto...
Ciao e grazie
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 09:58:41 UTC
Permalink
Post by Lorenzo1981
<?xml version="1.0" encoding="iso-8859-1"?>
<AntMovieCatalog Format="35" Version="3.5.0 (2005-05-29)"
Date="21/06/2005
21.55.51">
<Catalog>
<Properties/>
<Contents>
<Movie Number="1" Checked="True" Date="21/06/2005" Rating="8.5"
OriginalTitle="The Matrix"/>
<Movie Number="2" Checked="True" Date="21/06/2005" Rating="6.5"
OriginalTitle="The Matrix Reloaded"/>
</Contents>
</Catalog>
</AntMovieCatalog>
In pratica avere più valori su una stessa riga mi incasina tutto...
Ciao e grazie
http://www.google.com/search?num=50&hl=en&lr=&biw=971&q=microsoft+xml+parser+example+visual+basic
Post by Lorenzo1981
Post by *Alessandro*
http://www.topxml.com/xml/articles/xmlvbasp/
Alla fine ci trovi esempi di codice.
Ciaotutti,

* - "third time's the charm"
Gianluca Cannalire [MVP] [www.visual-basic.it]
2005-06-22 10:01:38 UTC
Permalink
Post by Lorenzo1981
Allora Io volevo poter leggere un file xml da usare come catalogo per
dei film..
Se uso un xml così formato
....
Post by Lorenzo1981
Riesco a leggere in questo modo e mettere Number e OriginalTitle nel
listbox..
Private xmlDoc As DOMDocument
Private Sub Form_Load()
Dim xmlChildNode As IXMLDOMNode
Set xmlDoc = New DOMDocument
xmlDoc.Load (App.Path & "/prova.xml")
For Each xmlChildNode In xmlDoc.documentElement.childNodes
mess = xmlChildNode.Attributes.getNamedItem("Number").Text + " " +
xmlChildNode.Attributes.getNamedItem("OriginalTitle").Text
lstNames.AddItem mess
Next
End Sub
<?xml version="1.0" encoding="iso-8859-1"?>
<AntMovieCatalog Format="35" Version="3.5.0 (2005-05-29)"
Date="21/06/2005
21.55.51">
<Catalog>
<Properties/>
<Contents>
<Movie Number="1" Checked="True" Date="21/06/2005" Rating="8.5"
OriginalTitle="The Matrix"/>
<Movie Number="2" Checked="True" Date="21/06/2005" Rating="6.5"
OriginalTitle="The Matrix Reloaded"/>
</Contents>
</Catalog>
</AntMovieCatalog>
In pratica avere più valori su una stessa riga mi incasina tutto...
Ciao e grazie
Il file XML è praticamente lo stesso...
Che problema (errore) riscontri???

Il nodo è sempre "Movie" (in entrami i formati) e gli attributi sono
identici...
Il fatto che siano uno per riga o tutti su una riga, per l'XML non fa
alcuna differenza.

ciao!
--
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
Lorenzo1981
2005-06-22 10:19:05 UTC
Permalink
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Lorenzo1981
Allora Io volevo poter leggere un file xml da usare come catalogo per
dei film..
Se uso un xml così formato
....
Post by Lorenzo1981
Riesco a leggere in questo modo e mettere Number e OriginalTitle nel
listbox..
Private xmlDoc As DOMDocument
Private Sub Form_Load()
Dim xmlChildNode As IXMLDOMNode
Set xmlDoc = New DOMDocument
xmlDoc.Load (App.Path & "/prova.xml")
For Each xmlChildNode In xmlDoc.documentElement.childNodes
mess = xmlChildNode.Attributes.getNamedItem("Number").Text + " " +
xmlChildNode.Attributes.getNamedItem("OriginalTitle").Text
lstNames.AddItem mess
Next
End Sub
<?xml version="1.0" encoding="iso-8859-1"?>
<AntMovieCatalog Format="35" Version="3.5.0 (2005-05-29)"
Date="21/06/2005
21.55.51">
<Catalog>
<Properties/>
<Contents>
<Movie Number="1" Checked="True" Date="21/06/2005" Rating="8.5"
OriginalTitle="The Matrix"/>
<Movie Number="2" Checked="True" Date="21/06/2005" Rating="6.5"
OriginalTitle="The Matrix Reloaded"/>
</Contents>
</Catalog>
</AntMovieCatalog>
In pratica avere più valori su una stessa riga mi incasina tutto...
Ciao e grazie
Il file XML è praticamente lo stesso...
Che problema (errore) riscontri???
Il nodo è sempre "Movie" (in entrami i formati) e gli attributi sono
identici...
Il fatto che siano uno per riga o tutti su una riga, per l'XML non fa
alcuna differenza.
ciao!
Ho controllato..nel secondo caso il nodo è <Catalog> come dovrei fare a
passare sul nodo Movie? (scusate se sono cose elementari ma è da poco che
mi son avvicinato a vb e sopratutto a xml)
Invece per il fatto di tutto sulla stessa riga avevi ragione ho risolto.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 10:26:29 UTC
Permalink
Post by Lorenzo1981
Ho controllato..nel secondo caso il nodo è <Catalog> come dovrei
fare a passare sul nodo Movie? (scusate se sono cose elementari ma è
da poco che mi son avvicinato a vb e sopratutto a xml)
Una bella funzione ricorsiva e passa la paura.
Ciaotutti,

* - e leggilo tutto quel link
*Alessandro*
2005-06-22 10:06:12 UTC
Permalink
In news:d9bd5l$tbf$***@area.cu.mi.it,
Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Il file XML è praticamente lo stesso...
Che problema (errore) riscontri???
Il nodo è sempre "Movie" (in entrami i formati) e gli attributi sono
identici...
Il fatto che siano uno per riga o tutti su una riga, per l'XML non fa
alcuna differenza.
In uno c'e' un bell'elemento Properties, e lui non controlla mai il
basename, l'XML parser si vede chiedere un named attribute che non esiste e
gli sputa in un occhio.

Ciaotutti,

*
Lorenzo1981
2005-06-22 10:32:03 UTC
Permalink
Post by *Alessandro*
Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Il file XML è praticamente lo stesso...
Che problema (errore) riscontri???
Il nodo è sempre "Movie" (in entrami i formati) e gli attributi sono
identici...
Il fatto che siano uno per riga o tutti su una riga, per l'XML non fa
alcuna differenza.
In uno c'e' un bell'elemento Properties, e lui non controlla mai il
basename, l'XML parser si vede chiedere un named attribute che non esiste e
gli sputa in un occhio.
Ciaotutti,
*
C'è anche <Catalog> </Catalog> io mi trovo li... cosa devo impostare per
portarmi sul Movie?
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 10:36:14 UTC
Permalink
Post by Lorenzo1981
C'è anche <Catalog> </Catalog> io mi trovo li... cosa devo
impostare per portarmi sul Movie?
Movie e' un child di Catalog, ma non fidarti... Usa una funzione ricorsiva e
controlla il baseName.

ciaotutti,

*
Lorenzo1981
2005-06-22 10:49:44 UTC
Permalink
Post by *Alessandro*
Post by Lorenzo1981
C'è anche <Catalog> </Catalog> io mi trovo li... cosa devo
impostare per portarmi sul Movie?
Movie e' un child di Catalog, ma non fidarti... Usa una funzione ricorsiva e
controlla il baseName.
ciaotutti,
*
Tipo in che modo?
Grazie ancora di tutto
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
*Alessandro*
2005-06-22 11:53:28 UTC
Permalink
Post by Lorenzo1981
Post by *Alessandro*
Movie e' un child di Catalog, ma non fidarti... Usa una funzione
ricorsiva e controlla il baseName.
ciaotutti,
*
Tipo in che modo?
Una query xpath per estrarre tutti i nodi Movie ti porta tutto a un solo
livello.

In alternativa, la famosa funzione ricorsiva:

Sub AddElementFromXML(ByRef x As IXMLDOMNode)
Dim n As IXMLDOMNode
If x.baseName = "Movie" Then
' Aggiungi l'elemento alla list box come d'uso
Else
If x.children.length Then
For Each n In x.childNodes
AddElementFromXML n
Next
End If
End If
End Sub

La chiami come:

Sub Main ' o Command1_Click, o quello che preferisci
Dim oXMLDom As New MSXML2.DOMDocument
Dim oNode as IXMLDOMNode
oXMLDom.Load ("c:\film.xml")

For Each oNode in oXMLDom.childNodes
AddElementFromXML n
Next
End Sub

Codice non testato, pomodori e gatti marci > /dev/null

Ciaotutti,

*
Lorenzo1981
2005-06-22 12:23:56 UTC
Permalink
Post by *Alessandro*
Post by Lorenzo1981
Post by *Alessandro*
Movie e' un child di Catalog, ma non fidarti... Usa una funzione
ricorsiva e controlla il baseName.
ciaotutti,
*
Tipo in che modo?
Una query xpath per estrarre tutti i nodi Movie ti porta tutto a un solo
livello.
Sub AddElementFromXML(ByRef x As IXMLDOMNode)
Dim n As IXMLDOMNode
If x.baseName = "Movie" Then
' Aggiungi l'elemento alla list box come d'uso
Else
If x.children.length Then
For Each n In x.childNodes
AddElementFromXML n
Next
End If
End If
End Sub
Sub Main ' o Command1_Click, o quello che preferisci
Dim oXMLDom As New MSXML2.DOMDocument
Dim oNode as IXMLDOMNode
oXMLDom.Load ("c:film.xml")
For Each oNode in oXMLDom.childNodes
AddElementFromXML n
Next
End Sub
Codice non testato, pomodori e gatti marci > /dev/null
Ciaotutti,
*
Ho modificato If x.childNodes.length Then perchè avevi messo
x.children.length e non andava..ora si ferma su errore run-time 91
:Variabile oggetto o variabile del blocco With non impostata. e l'errore
lo da su If x.childNodes.length Then

Dim n As IXMLDOMNode
Dim oXMLDom As New MSXML2.DOMDocument
Dim oNode As IXMLDOMNode

Private Sub Form_Load()
oXMLDom.Load (App.Path & "/prova.xml")
For Each oNode In oXMLDom.childNodes
AddElementFromXML n
Next
End Sub

Sub AddElementFromXML(ByRef x As IXMLDOMNode)
Dim n As IXMLDOMNode
If x.baseName = "Movie" Then
' Aggiungi l'elemento alla list box come d'uso
Text1 = "BBBB"
Else
If x.childNodes.length Then
For Each n In x.childNodes
AddElementFromXML n
Next
End If
End If
End Sub
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Lorenzo1981
2005-06-22 12:31:37 UTC
Permalink
Post by Lorenzo1981
Post by *Alessandro*
Post by Lorenzo1981
Post by *Alessandro*
Movie e' un child di Catalog, ma non fidarti... Usa una funzione
ricorsiva e controlla il baseName.
ciaotutti,
*
Tipo in che modo?
Una query xpath per estrarre tutti i nodi Movie ti porta tutto a un solo
livello.
Sub AddElementFromXML(ByRef x As IXMLDOMNode)
Dim n As IXMLDOMNode
If x.baseName = "Movie" Then
' Aggiungi l'elemento alla list box come d'uso
Else
If x.children.length Then
For Each n In x.childNodes
AddElementFromXML n
Next
End If
End If
End Sub
Sub Main ' o Command1_Click, o quello che preferisci
Dim oXMLDom As New MSXML2.DOMDocument
Dim oNode as IXMLDOMNode
oXMLDom.Load ("c:film.xml")
For Each oNode in oXMLDom.childNodes
AddElementFromXML n
Next
End Sub
Codice non testato, pomodori e gatti marci > /dev/null
Ciaotutti,
*
Ho modificato If x.childNodes.length Then perchè avevi messo
x.children.length e non andava..ora si ferma su errore run-time 91
:Variabile oggetto o variabile del blocco With non impostata. e l'errore
lo da su If x.childNodes.length Then
Dim n As IXMLDOMNode
Dim oXMLDom As New MSXML2.DOMDocument
Dim oNode As IXMLDOMNode
Private Sub Form_Load()
oXMLDom.Load (App.Path & "/prova.xml")
For Each oNode In oXMLDom.childNodes
AddElementFromXML n
Next
End Sub
Sub AddElementFromXML(ByRef x As IXMLDOMNode)
Dim n As IXMLDOMNode
If x.baseName = "Movie" Then
' Aggiungi l'elemento alla list box come d'uso
Text1 = "BBBB"
Else
If x.childNodes.length Then
For Each n In x.childNodes
AddElementFromXML n
Next
End If
End If
End Sub
Ho risolto già da solo ti ringrazio tantissimo ora provo ad andare avanti
Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Gianluca Cannalire [MVP] [www.visual-basic.it]
2005-06-22 12:39:15 UTC
Permalink
Post by Lorenzo1981
Ho modificato If x.childNodes.length Then perchè avevi messo
x.children.length e non andava..ora si ferma su errore run-time 91
Hai visto il codice che ti ho postato?
ciao!
--
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
Lorenzo1981
2005-06-22 12:55:14 UTC
Permalink
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Lorenzo1981
Ho modificato If x.childNodes.length Then perchè avevi messo
x.children.length e non andava..ora si ferma su errore run-time 91
Hai visto il codice che ti ho postato?
ciao!
Grazie questa soluzione forse mi va bene perchè ora quando seleziono un
film dal listbox voglio visualizzare le informazioni specifiche dentro a
un textbox in questo modo posso farlo
Grazie
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Lorenzo1981
2005-06-22 13:05:06 UTC
Permalink
Post by Lorenzo1981
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Lorenzo1981
Ho modificato If x.childNodes.length Then perchè avevi messo
x.children.length e non andava..ora si ferma su errore run-time 91
Hai visto il codice che ti ho postato?
ciao!
Grazie questa soluzione forse mi va bene perchè ora quando seleziono un
film dal listbox voglio visualizzare le informazioni specifiche dentro a
un textbox in questo modo posso farlo
Grazie
Ora mi è rimasta solo una perplessità..
Come faccio qui
'Set oNodeList =
oXMLDom.selectNodes("AntMovieCatalog/Catalog/Contents/Movie[@Number=1]")
a mettere al posto del 1 una variabile??
Scusami per la domanda stupida...
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Gianluca Cannalire [MVP] [www.visual-basic.it]
2005-06-22 13:11:18 UTC
Permalink
Post by Lorenzo1981
Ora mi è rimasta solo una perplessità..
Come faccio qui
'Set oNodeList =
a mettere al posto del 1 una variabile??
Scusami per la domanda stupida...
Beh, se ti rendo conto da solo che la domanda è stupida, perchè non ci hai
ragionato un pochino sopra???

Se "AntMovieCatalog/Catalog/Contents/Movie[@Number=1]" è una stringa cosa
c'e' di più semplice di una concatenazione?

"AntMovieCatalog/Catalog/Contents/Movie[@Number=" & tuaVariabile & "]"

Oppure, altro sistema

dim sQuery as string
dim sToken as string
sQuery = "AntMovieCatalog/Catalog/Contents/Movie[@Number=$$]"
sToker = "$$"

oXMLDom.selectNodes(Replace(sQuery,sToken,TuaVariabile))

Ciao!
--
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
Lorenzo1981
2005-06-22 13:43:24 UTC
Permalink
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Lorenzo1981
Ora mi è rimasta solo una perplessità..
Come faccio qui
'Set oNodeList =
a mettere al posto del 1 una variabile??
Scusami per la domanda stupida...
Beh, se ti rendo conto da solo che la domanda è stupida, perchè non ci hai
ragionato un pochino sopra???
c'e' di più semplice di una concatenazione?
Oppure, altro sistema
dim sQuery as string
dim sToken as string
sToker = "$$"
oXMLDom.selectNodes(Replace(sQuery,sToken,TuaVariabile))
Ciao!
Ok... Ciao e grazie
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Gianluca Cannalire [MVP] [www.visual-basic.it]
2005-06-22 11:27:57 UTC
Permalink
Post by *Alessandro*
In uno c'e' un bell'elemento Properties, e lui non controlla mai il
basename, l'XML parser si vede chiedere un named attribute che non
esiste e gli sputa in un occhio.
Si, sono perfettamente d'accordo, ma volevo vedere se ci arrivava da solo
;)

Comunque, il codice migliore è quello che fa uso delle query Xpath, come
quello qui sotto

Dim oXMLDom As New MSXML2.DOMDocument
oXMLDom.Load ("c:\film.xml")

Dim oNodeList As IXMLDOMNodeList
Dim oNode As IXMLDOMNode
Dim oNodeAttributes As IXMLDOMNamedNodeMap


Set oNodeList =
oXMLDom.selectNodes("AntMovieCatalog/Catalog/Contents/Movie")


For Each oNode In oNodeList

'sample node
'<Movie Number="1" Checked="True" Date="21/06/2005" Rating="8.5"
OriginalTitle="The Matrix" />

Set oNodeAttributes = oNode.Attributes
Debug.Print "Movie number: " &
oNodeAttributes.getNamedItem("Number").nodeValue
Debug.Print "Checked: " &
oNodeAttributes.getNamedItem("Checked").nodeValue
Debug.Print "Date: " &
oNodeAttributes.getNamedItem("Date").nodeValue
Debug.Print "Rating: " &
oNodeAttributes.getNamedItem("Rating").nodeValue
Debug.Print "OriginalTitle: " &
oNodeAttributes.getNamedItem("OriginalTitle").nodeValue
Debug.Print "-----"

Next

Ovviamente la query xpath puo' essere ancor piu' "specifica" come sei
seguenti esempi:

'trova tutti i nodi dove l'attributo number del nodo Movie è uguale a 1
Set oNodeList =
oXMLDom.selectNodes("AntMovieCatalog/Catalog/Contents/Movie[@Number=1]")
'trova tutti i nodi dove l'attributo Rating del nodo Movie è maggiore di 8
Set oNodeList =
oXMLDom.selectNodes("AntMovieCatalog/Catalog/Contents/Movie[@Rating>8]")

o ancora

Set oNodeList = oXMLDom.selectNodes("//Movie[@Rating>8]")

facendo una ricerca ricorsiva senza specificare il path completo

Ciao!
--
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
*Alessandro*
2005-06-22 11:54:24 UTC
Permalink
In news:d9bi7g$5ov$***@area.cu.mi.it,
Gianluca Cannalire [MVP] [www.visual-basic.it]
Post by Gianluca Cannalire [MVP] [www.visual-basic.it]
Set oNodeAttributes = oNode.Attributes
Debug.Print "Movie number: " &
oNodeAttributes.getNamedItem("Number").nodeValue
Debug.Print "Checked: " &
oNodeAttributes.getNamedItem("Checked").nodeValue
Debug.Print "Date: " &
oNodeAttributes.getNamedItem("Date").nodeValue
Debug.Print "Rating: " &
oNodeAttributes.getNamedItem("Rating").nodeValue
Debug.Print "OriginalTitle: " &
oNodeAttributes.getNamedItem("OriginalTitle").nodeValue
Debug.Print "-----"
L'unico dubbio e' se possano esserci piu' catalog o piu' contents... Non
credo, dato che non ci sono parametri di identificazione, ma
laggentesonostrani. Beh, ok, c'e' anche il dubbio se tutti gli attributi
siano obbligatori, ma la gestione degli errori e' comunque "best practice".

Ciaotutti,

*
*Alessandro*
2005-06-22 10:03:26 UTC
Permalink
Post by Lorenzo1981
Private xmlDoc As DOMDocument
Private Sub Form_Load()
Dim xmlChildNode As IXMLDOMNode
Set xmlDoc = New DOMDocument
xmlDoc.Load (App.Path & "/prova.xml")
For Each xmlChildNode In xmlDoc.documentElement.childNodes
mess = xmlChildNode.Attributes.getNamedItem("Number").Text + " " +
xmlChildNode.Attributes.getNamedItem("OriginalTitle").Text
lstNames.AddItem mess
Next
End Sub
A parte l'indentazione a canazzo,

For Each xmlChildNode In xmlDoc.documentElement.childNodes

Cioe', cosi'? Senza nemmeno controllare che l'elemento sia del tipo giusto?

Comincia ad accertarti di non stare lavorando su qualcos'altro... Una bella
funzione ricorsiva e passa la paura.

Ciaotutti,

*
Wodka40°
2005-06-22 10:55:23 UTC
Permalink
cut
Post by *Alessandro*
Cioe', cosi'? Senza nemmeno controllare che l'elemento sia del tipo giusto?
Comincia ad accertarti di non stare lavorando su qualcos'altro... Una
bella funzione ricorsiva e passa la paura.
Beh forse non hai capito che è li che si pianta!...forse manca sa come si
scrive una cosa del genere!

Per una volta che un newbie non chiede codice ma prova a spippolare...eddai
aiutatelo un po di più!!!!
*Alessandro*
2005-06-22 07:26:50 UTC
Permalink
Post by Lorenzo1981
<file1=1 descrizione immagine="imm1.jpg" \>
Questa linea ha tre errori al prezzo di due: primo, un tag name non e' un
attributo, ed in quanto tale non puo' avere un valore. Secondo, un nome
attributo non puo' contenere spazi. Terzo (derivato dall'interpretazione
letterale del codice), gli attributi devono avere un valore (hai detto al
parser che c'e' un attributo "descrizione", ma non gli hai fornito alcun
valore).

Oltre all'usare la forma indicata da ma81x, suggerisco anche encoding utf-8
anziche' iso-8859-1, tanto lo manipoli comunque con l'xml parser MS, che ti
fa la conversione da solo in ambo i sensi, quindi non ti costa nulla e ti
semplifica la vita quando devi trattare caratteri strani.

Ciaotutti,

* - che ha ancora gli incubi in greco
Gianluca Cannalire [MVP] [www.visual-basic.it]
2005-06-22 08:04:34 UTC
Permalink
Post by Lorenzo1981
Ps. Vi chiedo se qualcuno può aiutarmi o almeno indirizzarmi verso
qualche esempio inquanto mi trovo incasinato ad avere
<file1=1 descrizione immagine="imm1.jpg" \>
e non
<file1> descrizione immagine="imm1.jpg"<\file1>
http://msdn.microsoft.com/xml

Troverai tutto quello ti serve (documentazione, materiale, esempi).

Ciao!
--
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
Loading...