We all know I have OCD when it comes to formatting. Using the built in PowerShell cmdlets (Export-XmlCli) to export XML left me with a mess of an XML Schema that I couldn’t apply a XSL Transform to. I needed something that would allow me to control the schema, and insert the XSL declaration. After doing quite a bit of online searching and research, I decided to try using the .NET class System.XML.XmlTextWriter. The code sample below is the basic snippet using the class and creating a document.
A couple of notes:
- $filepath will need to be set to the full file path, using “.\” will not work.
- If you are creating a complex file, you will want to note which tag you are closing with the WriteEndElement.
# Set the File Name
$filePath = "C:\Reports\Report.xml"
# Create The Document
$XmlWriter = New-Object System.XMl.XmlTextWriter($filePath,$Null)
# Set The Formatting
$xmlWriter.Formatting = "Indented"
$xmlWriter.Indentation = "4"
# Write the XML Decleration
$xmlWriter.WriteStartDocument()
# Set the XSL
$XSLPropText = "type='text/xsl' href='style.xsl'"
$xmlWriter.WriteProcessingInstruction("xml-stylesheet", $XSLPropText)
# Write Root Element
$xmlWriter.WriteStartElement("RootElement")
# Write the Document
$xmlWriter.WriteStartElement("Servers")
$xmlWriter.WriteElementString("Name","SERVER01")
$xmlWriter.WriteElementString("IP","10.30.23.45")
$xmlWriter.WriteEndElement # <-- Closing Servers
# Write Close Tag for Root Element
$xmlWriter.WriteEndElement # <-- Closing RootElement
# End the XML Document
$xmlWriter.WriteEndDocument()
# Finish The Document
$xmlWriter.Finalize
$xmlWriter.Flush
$xmlWriter.Close()