【问题标题】:How to get an XML element text in a LibreOffice Basic macro?如何在 LibreOffice Basic 宏中获取 XML 元素文本?
【发布时间】:2013-11-30 15:00:05
【问题描述】:

我有一个 LibreOffice Basic 宏来写入/读取 XML 文件。我已经从 VBA 移植了它们。到目前为止,一切似乎都在工作,除了从 XML 元素中检索文本。下面是创建 XML 对象、将其写入文件并将 XML 文件读入 XML 对象的(简化的)Sub:

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 中完美运行。

任何想法为什么会发生这种情况?

【问题讨论】:

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


    【解决方案1】:

    我明白了。由于某种原因,程序无法识别节点的 .Text 属性。但是,它可以识别 .nodeTypedValue。不同之处在于 .Text 属性返回该节点的 unformatted 文本,而 .nodeTypedValue 属性返回节点的 formatted 值。

    更多详情请访问: http://msdn.microsoft.com/en-us/library/office/aa163921(v=office.10).aspx

    所以要使上面的代码正常工作,请将 oNode.Text 替换为 oNode.nodeTypedValue。

    补充说明:如果你想使用特定版本的 MSXML,你可以创建一个 XML 对象如下(不使用 OleObjectFactory):

    oXML = CreateObject("Msxml2.DOMDocument.4.0")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多