Sprawa jest dosyć dziwna, ale cóż, jak się w VBA pisze to się raz na jakiś czas odkrywa takie ciekawostki.
Mam sobie xmla z listą aplikacji, który ma mniej więcej taką strukturę:
<ApplicationList>
<Application name="Nazwa aplikacji">
<fileInfoList>
<FileInfo name="plik1.dot" bytesLenght="123456"/>
<FileInfo name="plik2.dot" bytesLenght="32158"/>
...
...
Mam też obiekt DOMDocument40 xmlAppList, do którego jest ten xml wczytywany poprzez xml.loadXML (ret), gdzie ret to string odpowiedzi z http.
Jestem pewna, że xml jest wczytany, ponieważ pliki w nim wylistowane są pobierane przez http. Za to już po pobraniu, leci sobie takie jedno sprawdzenie, które nie ważne co robi, ważne, że też próbuje wczytać sobie listę plików:
Private Const APPS = "x:ApplicationList/x:Application"
Private Const FILES = "x:fileInfoList/x:FileInfo"
Public Function GetFilesNodes(ByVal appName As String) As IXMLDOMNodeList
appName = unicode2utf8(appName) 'w xmlu jest w utf8
If appName = "*" Then
'Znaczy że uaktulaniamy wszystkie aplikacje
Set GetFilesNodes = xmlAppList.SelectNodes(APPS + "/" + FILES + "[@bytesLength > 0]")
Else
Set GetFilesNodes = xmlAppList.SelectNodes(APPS + "[@name='" + appName + "']/" + FILES + "[@bytesLength > 0]")
End If
End Function
I tutaj funkcja mnie zawodzi, ponieważ GetFilesNodes nie zawiera żadnych węzłów. Do pobierania plików została użyta dokładnie ta sama funkcja i pliki się pobrały.
Jest do tego ciekawostka - debugując odkryłam, że choć xmlAppList.xml zawiera prawidłowy xml, to w xmlAppList.Text jest pusty string...
Co się dzieje? Dlaczego nie chce mi zwrócić tych głupich węzłów, chociaż xmlAppList.xml je zawiera?
I przy okazji - co ja źle ładuje xmla, czy co? Dlaczego nie jest wypełnione pole Text?
Edit: A już sobie sama odpowiedziałam... Pomiędzy tymi dwoma wywołaniami wywołałam appendChild na tym akurat nodzie, który potrzebowałam, zamiast go sklonować najpierw.