如何在LibreOffice Basic宏中获取XML元素文本?

时间:2013-11-30 15:00:06

标签: xml macros libreoffice openoffice-basic libreoffice-basic

我有一个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中非常有效。

为什么会发生这种情况?

1 个答案:

答案 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")