我有一个LibreOffice Basic宏来写/读XML文件。我从VBA移植了它们。到目前为止,除了从XML元素中检索文本外,一切似乎都在起作用。下面是(简化的)Sub,它创建一个XML对象,将其写入文件并将XML文件读入XML对象:
Sub ExportImportXML
Dim oleService, oXMLexp as Object, oXMLimp as Object
Dim oRoot, oNode as Object
Dim HOME as String
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")
' Change this one:
HOME = "C:\tmp"
' Create an XML object to export
oXMLexp = oleService.createInstance("Msxml.DOMDocument")
With oXMLexp
.async = False
.validateOnParse = False
.resolveExternals = False
oRoot = .createElement("Root")
.appendChild(oRoot)
oNode = .createElement("ElementA")
oNode.Text = "Text of ElementA"
oRoot.appendChild(oNode)
MsgBox oNode.xml
'THIS DOESN'T WORK!
'MsgBox oNode.Text
oNode = .createElement("ElementB")
oNode.Text = "Text of ElementB"
oRoot.appendChild(oNode)
MsgBox .xml
.Save(HOME & "\test1.xml")
End With
' Create an XML object to import
oXMLimp = oleService.createInstance("Msxml.DOMDocument")
With oXMLimp
.Load(HOME & "\test1.xml")
MsgBox .xml
oNode = .DocumentElement.getElementsByTagName("ElementA").Item(0)
MsgBox oNode.xml
'THIS DOESN'T WORK!
'MsgBox oNode.Text
End With
End Sub
如您所见,我可以使用 .Text 写入节点,但我无法从中读取。
顺便说一句,这在VBA中非常有效。
为什么会发生这种情况?
答案 0 :(得分:0)
我明白了。由于某种原因,程序无法识别节点的 .Text 属性。但是,它确实识别 .nodeTypedValue 。区别在于.Text属性返回此节点的未格式化文本,而.nodeTypedValue属性返回节点的格式化值。
更多详情: http://msdn.microsoft.com/en-us/library/office/aa163921(v=office.10).aspx
为了使上面的代码工作,用 oNode.nodeTypedValue 替换 oNode.Text 。
附加说明:如果要使用特定版本的MSXML,可以按如下方式创建XML对象(不使用OleObjectFactory):
oXML = CreateObject("Msxml2.DOMDocument.4.0")