DocumentElement属性和SelectSingleNode一直没有返回,我已经验证了xml正确加载,问题似乎在于xml解析器。 xml没有任何名称空间,因此不需要设置它。
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>
createFile函数来自:
http://www.jpsoftwaretech.com/vba/msxml-object-library-routines/#createfile
答案 0 :(得分:1)
从字符串加载xml对我有用。(可能是字符串编码问题?)
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