[ kopca @ 25.06.2004. 12:57 ] @
Imam jednostavan XML fajl i treba mi vrednost (ili niz vrednosti) nekog cvora cije ime znam. MOlim za jednostavan primer neke f-je. Hvala...
[ mladenovicz @ 25.06.2004. 13:57 ] @
Za ovo ti treba referenca na MSXML 4.0

Ako XML izgleda ovako nekako

Code:

<Settings>
    <Sekcija Ime="Folderi">
        <Parametar Ime="DefaultFolder" Vrednost="..\"/>
        <Parametar Ime="RootFolder" Vrednost="E:\"/>
    </Sekcija>
    <Sekcija Ime="General">
        <Parametar Ime="RefreshRate" Vrednost="1000"/>
    </Sekcija>
</Settings>


onda ovaj kod radi:

Code:

Option Explicit

Private Const mcstrSekcije = "//Settings/Sekcija"
Private Const mcstrFileName = "E:\test.xml"

Private Function CitajVrednost(Sekcija As String, Parametar As String) As String
    Dim xmlDoc          As MSXML2.DOMDocument40
    Dim xmlSekcijaNd    As MSXML2.IXMLDOMNode
    Dim xmlParamNd      As MSXML2.IXMLDOMNode
    Dim xmlAttNd        As MSXML2.IXMLDOMAttribute
    
    Set xmlDoc = New MSXML2.DOMDocument40
    
    If xmlDoc.Load(mcstrFileName) Then
        Set xmlSekcijaNd = xmlDoc.selectSingleNode(mcstrSekcije & "[@Ime=""" & Sekcija & """]")
        If Not xmlSekcijaNd Is Nothing Then
            Set xmlParamNd = xmlSekcijaNd.selectSingleNode("Parametar[@Ime=""" & Parametar & """]")
            If Not xmlParamNd Is Nothing Then
                Set xmlAttNd = GetAttributeNode(xmlParamNd, "Vrednost")
                If Not xmlAttNd Is Nothing Then
                    CitajVrednost = xmlAttNd.Value
                Else
                    MsgBox "can not find attribute"
                End If
            Else
                MsgBox "can not find param"
            End If
        Else
            MsgBox "can not find section"
        End If
    Else
        MsgBox "can not load xml ..."
    End If
End Function


Private Function GetAttributeNode(vxmlElement As MSXML2.IXMLDOMNode, vstrAttributeName As String) _
As MSXML2.IXMLDOMAttribute
    On Error Resume Next
    
    Dim xmlElem As MSXML2.IXMLDOMElement
    Dim xmlDoc  As MSXML2.DOMDocument40
    
    If vxmlElement Is Nothing Then Exit Function
       
    Select Case vxmlElement.nodeType
        Case NODE_ATTRIBUTE
            Set GetAttributeNode = vxmlElement
        Case NODE_ELEMENT
            Set xmlElem = vxmlElement
            Set GetAttributeNode = xmlElem.GetAttributeNode(vstrAttributeName)
        Case NODE_DOCUMENT
            Set xmlDoc = xmlElem
            Set GetAttributeNode = xmlDoc.Attributes(vstrAttributeName)
    End Select
    
End Function

Private Sub cmdReadXML_Click()
    Debug.Print "Folderi", "RootFolder", CitajVrednost("Folderi", "RootFolder")
    Debug.Print "Folderi", "DefaultFolder", CitajVrednost("Folderi", "DefaultFolder")
    Debug.Print "General", "RefreshRate", CitajVrednost("General", "RefreshRate")
End Sub


Poenta je napraviti sto vise funkcija kao sto je ova GetAttributeNode. Znaci GetNode, GetNodeList, GetAttributeValue, ..., to spakovati u modul i onda je lako raditi sa bilo kojom strukturom XML fajla. Imas na MS sajtu dosta sampleova koji sadrze ovakve funkcije.

Mislim da bi neko od "ovlascenih lica" trebao da prebaci ovo u VB&ASP forum, ili bar do cekaonice.