Alex_Piggy
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: Option Explicit Dim oXML Set oXML = CreateObject("MSXML2.DomDocument.3.0") oXML.load "in.xml" PrettyXML oXML oXML.save "out.xml" Sub PrettyXML (oXML) Const cChar = " " : Const cCharCount = 2 Dim oNodesList, oNode Dim vOldLanguage, ancestorCount, aNodesList(), i, j vOldLanguage = oXML.getProperty ("SelectionLanguage") oXML.setProperty "SelectionLanguage", "XPath" Set oNodesList = oXML.documentElement.selectNodes("descendant-or-self::*[not(ancestor-or-self::*[following-sibling::text() | preceding-sibling::text()])]") ReDim aNodesList (oNodesList.length - 1,2) : i=LBound(aNodesList,1) : j=LBound(aNodesList,2) For Each oNode in oNodesList ancestorCount = oNode.SelectNodes("ancestor::*").length Set aNodesList(i,j+0) = oNode : aNodesList(i,j+1) = -1 : aNodesList(i,j+2) = -1 If ancestorCount > 0 Then aNodesList(i,j+1) = ancestorCount If oNode.selectNodes("child::text()").length = 0 Then aNodesList(i,j+2) = ancestorCount i = i+1 Next For i = LBound(aNodesList,1) To UBound(aNodesList,1) If aNodesList (i,j+1) <> -1 Then aNodesList(i,j+0).parentNode.InsertBefore oXML.createTextNode(vbCrLf & String(aNodesList(i,j+1) * cCharCount, cChar)), aNodesList(i,j+0) If aNodesList (i,j+2) <> -1 Then aNodesList(i,j+0).AppendChild oXML.createTextNode(vbCrLf & String(aNodesList(i,j+2) * cCharCount, cChar)) Set aNodesList(i,j+0) = Nothing Next oXML.setProperty "SelectionLanguage", vOldLanguage End Sub |
|