将XML文档转换为Powershell中的自定义类对象

问题描述:

我有一个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

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

试试这个:

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