如何使用PowerShell创建新的System.Xml.Linq.XElement

如何使用PowerShell创建新的System.Xml.Linq.XElement,xml,powershell,system.xml,Xml,Powershell,System.xml,我想使用System.XML.Linq对象以编程方式创建XML DOM。我不希望解析字符串或从磁盘加载文件来创建DOM。在C中这很容易,但在PowerShell中尝试这样做似乎是不可能的 选项1:不起作用 $xlinq = [Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") $el = new-Object System.

我想使用System.XML.Linq对象以编程方式创建XML DOM。我不希望解析字符串或从磁盘加载文件来创建DOM。在C中这很容易,但在PowerShell中尝试这样做似乎是不可能的

选项1:不起作用

$xlinq = [Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
$el = new-Object System.Xml.Linq.XElement "foo"
$xlinq = [Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
$xname = New-Object System.Xml.Linq.XName "foo"
$el = new-Object System.Xml.Linq.XElement $xname
这会产生以下错误:

new-Object : Cannot convert argument "0", with value: "foo",
 for "XElement" to type "System.Xml.Linq.XElement": "Cannot convert value "foo" to
 type "System.Xml.Linq.XElement". Error: "Data at the root level is invalid. 
 Line 1, position 1.""
选项2:不起作用

$xlinq = [Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
$el = new-Object System.Xml.Linq.XElement "foo"
$xlinq = [Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
$xname = New-Object System.Xml.Linq.XName "foo"
$el = new-Object System.Xml.Linq.XElement $xname
它给出了以下错误:

New-Object : Constructor not found. Cannot find an appropriate constructor for type System.Xml.Linq.XName.
根据MSDN,XName不包含任何公共构造函数。相反,该类提供了从字符串的隐式转换,允许您创建XName

"XName does not contain any public constructors. Instead, this class provides an implicit conversion from String that allows you to create an XName."
基于此,您可以将字符串强制转换为XName:

然后:

基于此,您可以将字符串强制转换为XName:

然后:

这也应该起作用:

[System.Xml.Linq.XElement]::Parse("<foo/>")
这也应该起作用:

[System.Xml.Linq.XElement]::Parse("<foo/>")

我注意到您的一个错误是[System.Xml.Linq.XElement]有一些自定义实例,所以删除New-Object

$el = [System.Xml.Linq.XElement]::new ([System.Xml.Linq.XName]"foo")

此命名空间中的所有内容都是在powershell中创建的,没有使用New-Object。

我注意到您的一个错误是[System.Xml.Linq.XElement]有一些自定义实例,所以请删除New-Object

$el = [System.Xml.Linq.XElement]::new ([System.Xml.Linq.XName]"foo")
此命名空间中的所有内容都是在powershell中不使用New-Object创建的。

注意::New语法适用于powershell 5及更高版本。注意::New语法适用于powershell 5及更高版本。