0

XMLファイルを読み書きするためのLibreOffice Basicマクロがあります。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で完全に機能します。

なぜこれが起こっているのですか?

4

1 に答える 1

0

わかった。何らかの理由で、プログラムは Node の.Textプロパティを認識しません。ただし、.nodeTypedValueは認識します。違いは、.Text プロパティがこのノードのフォーマットされていないテキストを返すのに対し、.nodeTypedValue プロパティはノードのフォーマットされた値を返すことです。

詳細: http://msdn.microsoft.com/en-us/library/office/aa163921(v=office.10).aspx

したがって、上記のコードを機能させるには、oNode.TextoNode.nodeTypedValueに置き換えます。

追加メモ: 特定のバージョンの MSXML を使用する場合は、次のように XML オブジェクトを作成できます (OleObjectFactory を使用しません)。

oXML = CreateObject("Msxml2.DOMDocument.4.0")
于 2013-12-01T04:26:11.707 に答える