mon*_*nny 16 powershell casting powershell-2.0
将XML从文件读入变量可以这样做:
[xml]$x=get-content myxml.xml
Run Code Online (Sandbox Code Playgroud)
但为什么不呢:
$x=[xml]get-content myxml.xml
Run Code Online (Sandbox Code Playgroud)
这使:
Unexpected token 'get-content' in expression or statement.
At line:1 char:20
+ $x=[xml]get-content <<<< myxml.xml
+ CategoryInfo : ParserError: (get-content:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
Run Code Online (Sandbox Code Playgroud)
那就是:为什么在等号的左侧进行强制转换操作,通常在编程语言中,转换是在右侧完成的,如(例如)在java中:
a=(String)myobject;
Run Code Online (Sandbox Code Playgroud)
Dav*_*ant 25
$x=[xml](get-content myxml.xml)
Run Code Online (Sandbox Code Playgroud)
小智 5
在 PowerShell 中,一切都是对象。这包括cmdlet。转换是将一种对象类型转换为另一种对象类型的过程。
这对于转换意味着什么,就像在数学中一样,您可以添加不必要的括号来帮助您自己弄清楚到底发生了什么。在数学中,1 + 2 + 3
可以变成((1 + 2) + 3)
不改变其含义。
对于 PowerShell,转换是在下一个对象(右侧)上执行的,因此$x = [xml] get-content myxml.xml
变为$x = ([xml] (get-content)) myxml.xml
. 这表明您正在尝试将cmdlet 强制转换为xml
对象,这是不允许的。
显然这不是您要尝试执行的操作,因此您必须先执行cmdlet,然后再进行转换,AKA $x = [xml] (get-content myxml.xml)
。另一种方法[xml] $x = get-content myxml.xml
是将变量声明为该类型,xml
以便分配给它的任何内容(也称为等号的整个右侧)都将强制转换为xml
。