2017-06-15 134 views
2

我有一個XmlDocument,其屬性爲TitleID。我也有一個C#類,它具有與我一樣的屬性Add-Type -Language CSharp -...。有沒有簡單的方法來鑄造XmlDocument或它的孩子將其轉換爲C#類?將XML文檔轉換爲Powershell中的自定義類對象

編輯

我使用PowerShell 4和XML看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<Objects> 
    <Object> 
    <Property Name="Title">Foo</Property> 
    <Property Name="Description">Bar</Property> 
    </Object> 
</Objects> 

我的PowerShell腳本看起來是這樣的:

$code = @" 
    using System; 
    namespace CSnamespace{ 
     public class CSclass { 
      public string Name { get; set; }; 
      public string Description { get; set; }; 
     } 
    } 
"@ 
Add-Type -TypeDefinition $code -Language CSharp 

$xml = [xml](Get-Content $path) 

這並未不工作,但我正在尋找這樣的事情:

$CSclass = [CSnamespace.CSclass]$xml 

任何幫助非常感謝。

UPDATE

具有標記爲從TToni應答回覆的幫助下,我能得到我需要的到底是什麼,但有一些調整。我的PowerShell代碼看起來是這樣的:

foreach ($object in $xml.Objects.Object) { 
    $cs = New-Object CSnamespace.CSclass 
    foreach ($property in $object) { 
     $cs.($property.Name) = $property.Innertext 
    } 
} 
+0

通過C#類,你的意思是.NET?如果是這樣,你可以打開文檔(獲取內容等),並使用$ xml = [xml](gc somefile.xml)將其明確地轉換爲XML文檔。 – thepip3r

+0

請給出一個xml示例,類和您的版本的PowerShell。 – JPBlanc

回答

2

PowerShell允許您解決性能動態,這樣

$pname = "Length" 
"SomeString".$pname # Instead of "SomeString".Length 

現在,你可以通過你的XML屬性/節點動態並將值分配給C#對象。例如,如果你的對象具有的屬性ab

$myObject = New-Object MyABObject 
$myXml = [xml]"<root><a>12345</a><b>hello</b></root>" 

foreach ($prop in $myXml.root | Get-Member -MemberType Property | select -ExpandProperty Name) 
{ 
    $myObject.$prop = $myXml.root.$prop 
} 
+0

如果像鑄造這樣簡單的東西不起作用,這將會做。我明天會測試一下。謝謝! – fanterrific

0

試試這個:

$document = [xml](Get-Content -path "C:\Path\To\My\XmlDocument.xml") 
相關問題