Hallo Rupert.
Die eigentlich Frage - welche sich auf Anhieb stellt - ist, wozu soetwas jemand braucht bzw. wieso (zur Hölle) sowas sinnvoll sein soll. Darum wird vermutlich noch niemand geantwortet haben. ;o) Auch ich vertrete diese Ansicht (XML-Dateien wird nicht per Notepad editiert sondern mit Hilfstools die bereits eine solche Formatierung anbieten).
Wie auch immer, die Antwort liegt ansich auf der Hand (ist allerdings nicht ganz so trivial wie es Gast97950 geschildert hat).
Zeilenumbrüche sind einfache Text-Elemente in XML. Du musst diese also nur vorher/nachher einfügen.
Private Sub PrettyFormat(ByVal XMLNode As MSXML2.IXMLDOMNode, Optional ByVal nl As Long)
Const C_INDENT_SPC As Byte = 2
Dim xmlChild As MSXML2.IXMLDOMElement
If nl < 0 Then nl = 0
If TypeOf XMLNode Is MSXML2.DOMDocument Then
Call PrettyFormat(CallByName(XMLNode, "DocumentElement", VbGet), nl)
ElseIf XMLNode.HasChildNodes Then
For Each xmlChild In XMLNode.ChildNodes
If xmlChild.HasChildNodes Then Call PrettyFormat(xmlChild, nl + 1)
Call XMLNode.InsertBefore(XMLNode.OwnerDocument.createTextNode(vbNewLine & Space$(C_INDENT_SPC * 1 + (nl))), xmlChild)
Next
Call XMLNode.appendChild(XMLNode.OwnerDocument.createTextNode(vbNewLine & Space$(C_INDENT_SPC * nl)))
End If
End Sub
Du rufst diese Prozedur also einfach vor dem Speichervorgang auf (Beispiel angelehnt anhand deines Codes):
Call PrettyFormat(xml)
Gruß
PS: Es heißt Menu und nicht Menue!
PPS: Keine Garantie auf Fehlerfreiheit.
|