Reputation: 943
The DocumentElement property and the SelectSingleNode keep on returning nothing, I have verified that the xml loads correctly, the problem seems to lie in the xml parser. The xml does not have any namespaces so it shouldn't needed to be set.
Private Function ParseWord(word As String) As String
Dim tempFile As String
tempFile = Environ("temp") & "\" & "temporaryWord" & ".xml"
Call CreateFile(tempFile, word)
Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
With xmlDoc
.async = False
.setProperty "SelectionLanguage", "XPath"
.validateOnParse = False
.Load tempFile
'.setProperty "SelectionNamespaces", ""
'.Namespaces = False
End With
Dim xmlElement As Object
Set xmlElement = xmlDoc.DocumentElement
If xmlElement Is Nothing Then
MsgBox "error in element"
Exit Function
End If
Dim nodeXML As Object
Set nodeXML = xmlElement.SelectSingleNode("/definitions/definition/text")
If nodeXML Is Nothing Then
MsgBox "error"
Else
MsgBox nodeXML.Text
ParseWord = nodeXML.Text
End If
End Function
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><definitions><definition sequence="0"> <textProns/><sourceDictionary>ahd-legacy</sourceDictionary><exampleUses/><relatedWords/><labels/> <citations/><word>intransigent</word><attributionText>from The American Heritage® Dictionary of the English Language, 4th Edition</attributionText><text>Refusing to moderate a position, especially an extreme position; uncompromising.</text><partOfSpeech>adjective</partOfSpeech><score>0.0</score></definition></definitions>
The createFile function is from here:
http://www.jpsoftwaretech.com/vba/msxml-object-library-routines/#createfile
Upvotes: 2
Views: 1982
Reputation: 11
I had a similar problem. It was caused by namespaces, and can be fixed as follows...
XMLDoc.SetProperty "SelectionNamespaces", "xmlns:dummy=""http://www.w3.org/2005/Atom"""
Set Entries = XMLDoc.DocumentElement.SelectNodes(".//dummy:entry")
'Set Entries = XMLDoc.DocumentElement.SelectNodes(".//entry") 'DOES NOT WORK
From here: https://vbaplanet.com/xml.php
Upvotes: 0
Reputation: 2534
Loading the xml from a string works for me.(maybe an string encoding issue?)
Sub test()
'Cell A1 contains the xml
ParseXML (Range("A1"))
End Sub
Private Function ParseXML(xmlString As String) As String
Dim tempFile As String
Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
With xmlDoc
.async = False
.setProperty "SelectionLanguage", "XPath"
.validateOnParse = False
.LoadXML xmlString
'.setProperty "SelectionNamespaces", ""
'.Namespaces = False
End With
Dim xmlElement As Object
Set xmlElement = xmlDoc.DocumentElement
If xmlElement Is Nothing Then
MsgBox "error in element"
Exit Function
End If
Dim nodeXML As Object
Set nodeXML = xmlElement.SelectSingleNode("/definitions/definition/text")
If nodeXML Is Nothing Then
MsgBox "error"
Else
MsgBox nodeXML.Text
ParseXML = nodeXML.Text
End If
End Function
Upvotes: 1