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来源:
<?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 http://www.jpsoftwaretech.com/vba/msxml-object-library-routines/#createfile
从字符串加载 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)