将XML文档转换为Powershell中的自定义类对象
问题描述:
我有一个XmlDocument
,其属性为Title
和ID
。我也有一个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
}
}
答
PowerShell允许您解决性能动态,这样
$pname = "Length"
"SomeString".$pname # Instead of "SomeString".Length
现在,你可以通过你的XML属性/节点动态并将值分配给C#对象。例如,如果你的对象具有的属性a
和b
$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")
通过C#类,你的意思是.NET?如果是这样,你可以打开文档(获取内容等),并使用$ xml = [xml](gc somefile.xml)将其明确地转换为XML文档。 – thepip3r
请给出一个xml示例,类和您的版本的PowerShell。 – JPBlanc