私は非常にうまく機能する小さなXMLのきれいなプリンターを作りました:
Sub PrettyPrint(Parent As IXMLDOMNode, Optional Level As Integer)
Dim Node As IXMLDOMNode
Dim Indent As IXMLDOMText
If Not Parent.ParentNode Is Nothing And Parent.ChildNodes.Length > 0 Then
For Each Node In Parent.ChildNodes
Set Indent = Node.OwnerDocument.createTextNode(vbNewLine & String(Level, vbTab))
If Node.NodeType = NODE_TEXT Then
If Trim(Node.Text) = "" Then
Parent.RemoveChild Node
End If
ElseIf Node.PreviousSibling Is Nothing Then
Parent.InsertBefore Indent, Node
ElseIf Node.PreviousSibling.NodeType <> NODE_TEXT Then
Parent.InsertBefore Indent, Node
End If
Next Node
End If
If Parent.ChildNodes.Length > 0 Then
For Each Node In Parent.ChildNodes
If Node.NodeType <> NODE_TEXT Then PrettyPrint Node, Level + 1
Next Node
End If
End Sub
DOMDocument
オブジェクトを渡し、Level
パラメータを空白のままにして呼び出すことで呼び出します。
- ドキュメントのインプレース変更を行います。
- そこにあった可能性のある重要でない空白(XML要素間の空白)はすべて失われます。
- 1つのタブを使用してインデントします。
- また、コメントや処理命令などをインデントします。
- のすべてのバージョンで動作します
DOMDocument
。
Dim XmlDoc as New MSXML2.DOMDocument40
' create/load your xml document
PrettyPrint XmlDoc
MsgBox XmlDoc.xml
SAXを介してそれを行う簡単な方法もあります。