我使用MSXML2.DOMDocument在VBA中生成一個XML文檔,然後將該對象的XML屬性發送到遠程服務器(通過POST)。如何在VBA中輸出MSXML2 XML文檔的文本時獲取新行?
MSXML2.DOMDocument.XML中的結果字符串沒有換行符,因此它是一個XML大塊。有沒有辦法讓ouptput在每個XML元素後添加一個新行,使得文件更具人性化?
這不完全是必要的,因爲服務器上收到的文件將被立即分析並將信息存儲在SQL數據庫中,但這有助於開發和測試。
我使用MSXML2.DOMDocument在VBA中生成一個XML文檔,然後將該對象的XML屬性發送到遠程服務器(通過POST)。如何在VBA中輸出MSXML2 XML文檔的文本時獲取新行?
MSXML2.DOMDocument.XML中的結果字符串沒有換行符,因此它是一個XML大塊。有沒有辦法讓ouptput在每個XML元素後添加一個新行,使得文件更具人性化?
這不完全是必要的,因爲服務器上收到的文件將被立即分析並將信息存儲在SQL數據庫中,但這有助於開發和測試。
在將文件寫入磁盤之前,您可以使用Replace
函數將">"
的每個實例替換爲">" & vbCrLf
。
或者你可以將XML保存到磁盤上,並用Firefox或IE打開它,它應該爲你做語法突出顯示。
也許你應該看看免費軟件ChilKat Xml而不是可怕的MSXML
,讓你的生活變得輕鬆。我記得使用MSXML縮進和格式化,我知道它有多令人沮喪。
祝你好運。
剛剛寫了一個VBA子文件,在保存之前縮進XML文檔。縮進類似於我在Visual Studio中格式化時看到的內容。也許它應該擴展到不僅處理子元素和CDatas。
Sub IndentXml(xml As IXMLDOMElement, Optional depth As Integer)
If IsMissing(depth) Then
depth = 0
End If
Dim txt As IXMLDOMText
If Not (xml.OwnerDocument.DocumentElement Is xml) Then
Set txt = xml.OwnerDocument.createTextNode(vbNewLine & String(depth, vbTab))
xml.ParentNode.InsertBefore txt, xml
End If
Dim child As IXMLDOMNode
Dim hasElements As Boolean
hasElements = False
For Each child In xml.ChildNodes
If child.NodeType = NODE_ELEMENT Then
IndentXml child, depth + 1
hasElements = True
ElseIf child.NodeType = NODE_CDATA_SECTION Then
Set txt = xml.OwnerDocument.createTextNode(vbNewLine & String(depth + 1, vbTab))
xml.InsertBefore txt, child
hasElements = True
End If
Next
If hasElements Then
Set txt = xml.OwnerDocument.createTextNode(vbNewLine & String(depth, vbTab))
xml.appendChild txt
End If
End Sub
感謝Darth Jurassic爲您的代碼。非常便利!
在我自己的代碼中,第二個「If」塊在「xml.ParentNode」中被絆倒爲Nothing。對於我自己而言,我改變了以下專線:
If Not (xml.OwnerDocument.DocumentElement Is xml) Then
到:
If depth > 0 Then
這工作得很好了什麼,我需要這樣想我會分享它。
我的問題的原因是,我沒有在運行此代碼的位置將根節點追加到DOM文檔。但它仍然適用於我所做的修改! –
感謝 - 看起來很有希望......我將在下週試用 – HorusKol