Recently, I came up with a requirement of creating a XML file as output of PowerShell Execution. The PowerShell will gather some information from the SharePoint Farm and it needs to generate an XML file with the gathered information.
The required output is something like,
<?xml version="1.0"?>
<!--Get the Information about the web application-->
<WebApplication>
<SiteCollections>
<SiteCollection Name="SiteCollectionTitle">
<SubSites Count="45">
<SubSite Title="Web title">
<Lists>
<List Title="ListTitle">
<RootFolder>Root folder Title</RootFolder>
</List>
</Lists>
</SubSite>
</SubSites>
</SiteCollection>
</SiteCollections>
</WebApplication>
The script to create the above file is as follows,
Let us create the XML File first. To do that,
# Assign the CSV and XML Output File Paths
$XML_Path = "D:SathishArticleSample.xml"
# Create the XML File Tags
$xmlWriter = New-Object System.XMl.XmlTextWriter($XML_Path,$Null)
$xmlWriter.Formatting = 'Indented'
$xmlWriter.Indentation = 1
$XmlWriter.IndentChar = "`t"
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteComment('Get the Information about the web application')
$xmlWriter.WriteStartElement('WebApplication')
$xmlWriter.WriteEndElement()
$xmlWriter.WriteEndDocument()
$xmlWriter.Flush()
$xmlWriter.Close()
# Create the Initial Node
$xmlDoc = [System.Xml.XmlDocument](Get-Content $XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollections")
$xmlDoc.SelectSingleNode("//WebApplication").AppendChild($siteCollectionNode)
$xmlDoc.Save($XML_Path)
$xmlDoc = [System.Xml.XmlDocument](Get-Content $XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollection")
$xmlDoc.SelectSingleNode("//WebApplication/SiteCollections").AppendChild($siteCollectionNode)
$siteCollectionNode.SetAttribute("Name", "SiteCollectionTitle")
$subSitesNode = $siteCollectionNode.AppendChild($xmlDoc.CreateElement("SubSites"));
$subSitesNode.SetAttribute("Count", "45")
$xmlDoc.Save($XML_Path)
$subSiteNameNode = $subSitesNode.AppendChild($xmlDoc.CreateElement("SubSite"));
$subSiteNameNode.SetAttribute("Title", "Web title")
$ListsElement = $subSiteNameNode.AppendChild($xmlDoc.CreateElement("Lists"));
$ListElement = $ListsElement.AppendChild($xmlDoc.CreateElement("List"));
$ListElement.SetAttribute("Title", "ListTitle")
$RootFolderElement = $ListElement.AppendChild($xmlDoc.CreateElement("RootFolder"));
$RootFolderTextNode = $RootFolderElement.AppendChild($xmlDoc.CreateTextNode("Root folder Title"));
$xmlDoc.Save($XML_Path)
The Script seems to be very simple. It covers how to create the child element, how to set the attributes, etc.,
Happy Coding,
Sathish Nadarajan.
Leave a comment