我正在尝试PowerShell和XML。不幸的是,我有一个我不明白的问题。我尝试测试节点再次$ null的值。但这似乎给出了错误的答案。
这是我要做的:file xml.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<report>
<row>
<pProductNr>5128.10.00</pProductNr>
</row>
</report>
然后我正在尝试:
[xml]$x=.xml.xml
$x.report.row.pProductNr -match $Null
结果是" true"。但是它看起来不是空的。
我在Powershell很新,看来我没有理解的魔术...我在做什么错?
to 读取XML文件的内容,例如xml.xml
到XML DOM中,您必须使用Get-Content
:
[xml] $x = Get-Content -Raw .xml.xml
您可以使用.
符号在您尝试的时候钻入文档。
但是,PowerShell的-match
操作员旨在与正则表达式合作 strings 。
如果您通过$null
,则PowerShell将其串联到''
,即空字符串,该字符串等于匹配 nothing 的正则表达式。
因此, ... -match $null
匹配任何东西 - 因此毫无意义。
通常,-match
-除非用^
和$
明确锚定 - 匹配LHS的 substring 。
要测试元素的内容是否为空还是不存在,只需使用-eq ''
:
$x.report.row.pProductNr -eq ''
警告:如果 Set-StrictMode -Version 2
或更高版本有效,则尝试引用不存在的属性会导致 error 。。