Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $a = New-Object PSObject -Property @{
- Name='New'
- Server = $null
- Database = $null
- UserName = $null
- Password = $null
- }
- $b = $a | Convertto-XML -NoTypeInformation
- <?xml version="1.0"?>
- <Objects>
- <Object>
- <Property Name="Password" />
- <Property Name="Name">New</Property>
- <Property Name="Server" />
- <Property Name="UserName" />
- <Property Name="Database" />
- </Object>
- </Objects>
- filter XmlProperty([String]$Property) {
- $_.SelectSingleNode("/Objects/Object/Property[@Name='$Property']").InnerText
- }
- $Name = $b | Xmlproperty Name
- $Server = $b | XmlProperty Server
- # etc...
- function ConvertFrom-Xml($XML) {
- foreach ($Object in @($XML.Objects.Object)) {
- $PSObject = New-Object PSObject
- foreach ($Property in @($Object.Property)) {
- $PSObject | Add-Member NoteProperty $Property.Name $Property.InnerText
- }
- $PSObject
- }
- }
- ConvertFrom-Xml $b
- function ConvertFrom-Xml {
- <#
- .SYNOPSIS
- Converts XML object to PSObject representation for further ConvertTo-Json transformation
- .EXAMPLE
- # JSON->XML
- $xml = ConvertTo-Xml (get-content 1.json | ConvertFrom-Json) -Depth 4 -NoTypeInformation -as String
- .EXAMPLE
- # XML->JSON
- ConvertFrom-Xml ([xml]($xml)).Objects.Object | ConvertTo-Json
- #>
- param([System.Xml.XmlElement]$Object)
- if (($Object -ne $null) -and ($Object.Property -ne $null)) {
- $PSObject = New-Object PSObject
- foreach ($Property in @($Object.Property)) {
- if ($Property.Property.Name -like 'Property') {
- $PSObject | Add-Member NoteProperty $Property.Name ($Property.Property | % {ConvertFrom-Xml $_})
- } else {
- if ($Property.'#text' -ne $null) {
- $PSObject | Add-Member NoteProperty $Property.Name $Property.'#text'
- } else {
- if ($Property.Name -ne $null) {
- $PSObject | Add-Member NoteProperty $Property.Name (ConvertFrom-Xml $Property)
- }
- }
- }
- }
- $PSObject
- }
- }
- function xmlNodeToPsCustomObject ($node){
- $hash = @{}
- foreach($attribute in $node.attributes){
- $hash.$($attribute.name) = $attribute.Value
- }
- $childNodesList = $node.ChildNodes.LocalName
- foreach($childnode in $node.childnodes){
- if(!($childnode -eq $null)){
- if(($childNodesList | ?{$_ -eq $childnode.LocalName}) -gt 1){
- if(!($hash.$($childnode.LocalName))){
- $hash.$($childnode.LocalName) += @()
- }
- if ($childnode.'#text' -ne $null) {
- $hash.$($childnode.LocalName) += $childnode.'#text'
- }else{
- $hash.$($childnode.LocalName) += xmlNodeToPsCustomObject($childnode)
- }
- }else{
- if ($childnode.'#text' -ne $null) {
- $hash.$($childnode.LocalName) = $childnode.'#text'
- }else{
- $hash.$($childnode.LocalName) = xmlNodeToPsCustomObject($childnode)
- }
- }
- }
- }
- return $hash | ConvertTo-PsCustomObjectFromHashtable
- }
- function ConvertTo-PsCustomObjectFromHashtable {
- param (
- [Parameter(
- Position = 0,
- Mandatory = $true,
- ValueFromPipeline = $true,
- ValueFromPipelineByPropertyName = $true
- )] [object[]]$hashtable
- );
- begin { $i = 0; }
- process {
- foreach ($myHashtable in $hashtable) {
- if ($myHashtable.GetType().Name -eq 'hashtable') {
- $output = New-Object -TypeName PsObject;
- Add-Member -InputObject $output -MemberType ScriptMethod -Name AddNote -Value {
- Add-Member -InputObject $this -MemberType NoteProperty -Name $args[0] -Value $args[1];
- };
- $myHashtable.Keys | Sort-Object | % {
- $output.AddNote($_, $myHashtable.$_);
- }
- $output
- } else {
- Write-Warning "Index $i is not of type [hashtable]";
- }
- $i += 1;
- }
- }
- }
Add Comment
Please, Sign In to add comment