22

将 XML 从文件读取到变量中可以这样完成:

[xml]$x = Get-Content myxml.xml

但为什么不:

$x = [xml]Get-Content myxml.xml

这使:

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

也就是说,为什么在等号的左侧进行强制转换操作?通常在编程语言中,转换是在右手边完成的,比如在 Java 中(比如说):

a = (String)myobject;
4

2 回答 2

30
$x = [xml](Get-Content myxml.xml)
于 2012-07-27T09:46:52.027 回答
6

在 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.

于 2018-07-25T02:43:32.340 回答