如何使用PowerShell创建新的System.Xml.Linq.XElement
我想使用System.XML.Linq对象以编程方式创建XML DOM。我不希望解析字符串或从磁盘加载文件来创建DOM。在C中这很容易,但在PowerShell中尝试这样做似乎是不可能的 选项1:不起作用如何使用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.
$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及更高版本。