+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [VBA - Access 2003] Problema XPath

  1. #1
    shyguy non è in linea Novello
    Post
    2

    [VBA - Access 2003] Problema XPath

    Salve a tutti, è il mio primo post e spero mi possiate aiutare.

    Io ho scritto la seguente function per analizzare un XML in cerca di alcuni dati specifici

    codice:
    Public Function DisplayNode(NomeAtt As String, ByRef Nodes As IXMLDOMNodeList, objXMLDoc As DOMDocument30, NodeName As String)
    
        Dim xNode As IXMLDOMNode
        Dim xPath As String 'xPath string
        Dim NodVal As String
        
        ' Analizzo il report KML in cerca della locazione desiderata
        ' xPath è personalizzato per l'uso con KML di Google Maps
        'objXMLDoc.SetProperty "SelectionNamespaces", "xmlns='http://earth.google.com/kml/2.0'"
        'objXMLDoc.SetProperty "SelectionLanguage", "XPath"
        ' trasformo tutto in minuscolo per una ricerca case-insensitive
        'xPath = "//Placemark[translate(name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = '" & LCase(NomeAtt) & "']//" & NodeName
    
        
        xPath = "//Placemark[name='" & NomeAtt & "']//" & NodeName
        Set Nodes = objXMLDoc.selectNodes(xPath)
        If Not (Nodes Is Nothing) Then
            For Each xNode In Nodes
                Debug.Print xNode.NodeName & ":" & xNode.text
                NodeVal = xNode.text
                'Debug.Print xNode.nodeName & ":" & xNode.nodeTypedValue
            Next xNode
        Else
            Debug.Print "non ho trovato nessun " & NodeName
        End If
        DisplayNode = NodeVal
        'Debug.Print NodeName & ": " & NodeVal
        Set xNode = Nothing
     
    End Function
    La funzione così com'è funziona e ritorna i valori desiderati ma non si avvale di XPath che invece io vorrei usare per poter sfruttare la funzione translate e fare una ricerca case-insensitive truccata
    codice:
    'xPath = "//Placemark[translate(name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = '" & LCase(NomeAtt) & "']//" & NodeName
    .
    Se tolgo il commento da
    codice:
     'objXMLDoc.SetProperty "SelectionNamespaces", "xmlns='http://earth.google.com/kml/2.0'"
    'objXMLDoc.SetProperty "SelectionLanguage", "XPath"
    che dovrebbe permettermi di usare XPath anche con XML3, il tutto non funziona più.

    Qualcuno sa aiutarmi?

    grazie mille in anticipo

  2. #2
    shyguy non è in linea Novello
    Post
    2
    Con un po' di lavoro sono riuscito a far funzionare xPath, o per lo meno a fare la validazione con il namespace, però ogni volta che faccio andare la Function i Nodes mi risultano vuoti, come se XPath fosse sbagliato, con vari test riesco ad avere qualche risultato ma solo per xPath= "//*" o xPath = "child::*" che in pratica seleziona tutto e non mi serve a nulla così

    codice:
       
    Public Function DisplayNode(NomeAtt As String, objXMLDoc As DOMDocument60, NodeName As String)
    
        Dim xNode As IXMLDOMElement
        Dim xPath As String 'xPath string
        Dim NodVal As String
    
        'Set Nodes = objXMLDoc.childNodes
        
        ' Analizzo il report KML in cerca della locazione desiderata
        ' xPath è personalizzato per l'uso con KML di Google Maps
        objXMLDoc.SetProperty "SelectionNamespaces", "xmlns:og=""http://www.opengis.net/kml/2.2"""
        objXMLDoc.validateOnParse = True
    
     ' faccio la verifica sui due nodi adeguatamente aggiustati per andare a selezionare il Placemark corretto
        xPath = "//og:Placemark[contains(og:name,og:verifica)]" '//og:" & NodeName
        'xPath = "//*"
        'Set Nodes = objXMLDoc.selectNodes(xPath)
        If Not (Nodes Is Nothing) Then
            For Each xNode In Nodes
                Debug.Print xNode.NodeName & ":" & xNode.text
                NodeVal = xNode.text
                'Debug.Print xNode.nodeName & ":" & xNode.nodeTypedValue
            Next xNode
        Else
            Debug.Print "non ho trovato nessun " & NodeName
        End If
        DisplayNode = NodeVal
        'Debug.Print NodeName & ": " & NodeVal
        Set xNode = Nothing
     
    End Function
    attualmente è così, vorrei capire se è colpa della mia query xPath o di VBA che magari lo processa male.

    grazie
    Ultima modifica di shyguy; 05-02-2011 01:57 

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi