我有一个XmlDocument
,其中包含Title
和ID
等属性。我还有一个C#类,它具有与Add-Type -Language CSharp -...
相同的属性。是否有一种快速简便的方法来转换XmlDocument
或它的子项以将其转换为C#类?
修改
我正在使用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
非常感谢任何帮助。
答案 0 :(得分:2)
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
}
答案 1 :(得分:0)
试试这个:
$document = [xml](Get-Content -path "C:\Path\To\My\XmlDocument.xml")
答案 2 :(得分:0)
借助TToni标记为“答案”的答复,我可以准确地得到所需的内容,但需要进行一些调整。我的Powershell代码如下:
foreach ($object in $xml.Objects.Object) {
$cs = New-Object CSnamespace.CSclass
foreach ($property in $object) {
$cs.($property.Name) = $property.Innertext
}
}