Wednesday, April 18, 2007

xmlclass.vbs

http://www.msexchangefaq.de/code/xmlclass2.vbs.txt



option explicit

dim xmlWriter

set xmlWriter = new XmlTextWriter
xmlWriter.filename = "filename.xml"
xmlWriter.Indentation = 4
wscript.echo "Stylesheet"
call xmlWriter.WriteStylesheet("stylesheet.xsl")
wscript.echo "--" & vbcrlf & xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Root"
call xmlWriter.WriteStartElement("Root")
call xmlWriter.WriteStartElement("sub1")
wscript.echo "--" & vbcrlf & xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Sonderzeichen"
call xmlWriter.WriteElementString("test", "aäöüÄÖÜß<>""'&;")
wscript.echo "Starttime"
call xmlWriter.WriteElementString("starttime", now())
wscript.echo "Endtime"
call xmlWriter.WriteElementString("endtime", "END")
call xmlWriter.WriteAttributeString ("id","wert")
wscript.echo "End"
call xmlWriter.WriteEndElement

call xmlWriter.WriteStartElement("sub2")
wscript.echo "--" & vbcrlf &amp; xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Starttime"
call xmlWriter.WriteElementString("tag3", now())

call xmlWriter.WriteStartElement("sub22")
wscript.echo "--" & vbcrlf &amp; xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Starttime"
call xmlWriter.WriteElementString("tag3", now())
call xmlWriter.DeleteEndElement

call xmlWriter.WriteStartElement("sub23")
wscript.echo "--" & vbcrlf &amp; xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Starttime"
call xmlWriter.WriteEndElement


call xmlWriter.WriteEndElement

call xmlWriter.WriteStartElement("sub2")
wscript.echo "--" & vbcrlf &amp; xmlwriter.getformattedxml & vbcrlf& "--"
wscript.echo "Starttime"
call xmlWriter.WriteEndElement


call xmlWriter.WriteEndElement
call xmlWriter.close

wscript.echo "--" & vbcrlf &amp; xmlwriter.getxml & vbcrlf& "--"

' wscript.echo "--" & vbcrlf &amp; xmlwriter.getprettyxml & vbcrlf& "--"

'~ xmlWriter.makeprettyxml

wscript.echo "--" & vbcrlf &amp; xmlwriter.getxml & vbcrlf& "--"




class XMLTextWriter
'~ Usage in VBScript. Please define StyleSheet and filename first and than start writing the data
'~ set xmlWriter = new XmlTextWriter
'~ xmlWriter.filename = "filename.xml"
'~ xmlWriter.Indentation = 4
'~ call xmlWriter.WriteStylesheet("stylesheet.xsl")
'~ call xmlWriter.WriteStartElement("Root")
'~ call xmlWriter.WriteElementString("starttime", now())
'~ call xmlWriter.WriteEndElement
'~ call xmlWriter.close

dim xmlfilename 'stores the filename
dim xmldom 'DOM Object
dim xmlparent 'currentNode
dim xmlroot 'RootNode
dim xmlobject 'PArent of currentNode
dim intIndentation

'~ xmlfile.write "" & vbcrlf

private Sub Class_Initialize
dim xmldeclaration
Set xmlDom = CreateObject("Microsoft.XMLDOM")
xmlDom.loadxml ""
set xmlobject = xmlDom
End Sub

public Property let filename(wert)
xmlfilename = wert
End Property

public Property let Indentation(wert)
' only for Backwards compatibility
End Property

public Property let Formatting(wert)
' writer.Formatting = Formatting.Indented ' Funktioniert nur mit .nEtg ?
End Property

sub Writestylesheet (item)
dim stylePI
Set stylePI = xmlDom.createProcessingInstruction("xml-stylesheet", "type=""text/xsl"" href="""&item & """")
xmlDom.appendChild(stylePI)
end sub

sub WriteStartElement(item)
dim xmlobject2
set xmlobject2 = xmlDom.createElement(item)
xmlobject.appendchild xmlobject2
set xmlobject = xmlobject2
end sub

sub WriteAttributeString(name,value) ' ergänzt eine ID zum aktuellen Element
xmlobject.setAttribute name, value
end sub


sub WriteElementString(item,wert) ' add XML tag and Data
dim xmldata
set xmldata = xmlDom.createElement(item)
xmldata.text = wert
xmlobject.appendchild(xmldata)
end sub

sub WriteEndElement
' Schliesse den aktuellen Client und gehe ein objekt höher
set xmlobject = xmlobject.parentnode
end sub

sub DeleteEndElement
' Entferne den letzten Client komplett
dim xmlobject2
set xmlobject2 = xmlobject
set xmlobject = xmlobject.parentnode
xmlobject.removechild(xmlobject2)
end sub


function getXML
' gebe die aktuelle XML-Information unformtiert aus
getxml = xmldom.xml
end function

function LoadXML(strxml)
' ersetze die Information durch eine neue XML-Information
xmldom.loadXML(strxml)
end function

sub Flush()
' Schreibe die aktuelle XML-Struktur als Datei heraus
xmldom.LoadXML getFormattedXML
xmldom.save(xmlfilename)
end sub


function getFormattedXML
' Gebe die XML-Struktur formatiert und besser lesbar aus
dim oStylesheet
set oStylesheet = CreateObject("Microsoft.XMLDOM")
oStylesheet.async = False
oStylesheet.loadXML ("" & vbcrlf & _
"" & vbcrlf & _
"" & vbcrlf & _
"" & vbcrlf & _
" " & vbcrlf & _
" " & vbcrlf & _
"
" & vbcrlf & _
"
" &amp; vbcrlf & _
"
")
getFormattedXML = xmlDOM.transformNode(oStylesheet)
end function


sub close()
xmldom.LoadXML getFormattedXML
xmldom.save(xmlfilename)
end sub

end class