xml - xml 文件中的 Powershell 变量范围

标签 xml powershell scope

如果我运行以下代码,我会根据文件是否存在并具有完整输出来获得预期结果(即 $filepath 始终等于“C:\test\test.txt”):

$filepath = "C:\test\test.txt"

If( Test-Path $filepath)
{
    Write-Host "File does exist: " $filepath
}
Else
{
    Write-Host "File does not exist: " $filepath
}

即。 $filepath 在 if block 的范围内

为什么从外部文件读取文件路径时这种行为似乎没有转换?此处,条件始终返回 false,并且输出显示为好像 $fileLocation 为空。

testConfig.xml 文件:

<ConfigFile>
    <FileLocation>C:\test\test.txt</FileLocation>
</ConfigFile>

powershell代码:

[xml]$config = Get-Content ".\testConfig.xml"

$fileLocation = $config.SelectNodes("//FileLocation")

If( Test-Path -LiteralPath $fileLocation)
{
    Write-Host "File does exist: " $fileLocation
}
Else
{
    Write-Host "File does not exist: " $fileLocation
}

这与变量作用域有关吗?从 xml 文件读取文件路径时,如何获得与第一个代码块相同的行为?

最佳答案

SelectNodes 返回一个XmlNodeList,而不是字符串。如果只想选择一个节点,则应使用 SelectSingleNode反而。此外,如果您传递 SelectSingleNode 返回的 XmlNode,它会将 FileLocation 传递给 Test-Path cmdlet,因为XmlNodeToString() 方法被调用并实际返回节点的名称。您可以使用 InnerText 属性来执行此操作:

$node = config.SelectSingleNode("//FileLocation")
Test-Path $node.InnerText

关于xml - xml 文件中的 Powershell 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637769/

相关文章:

java - Jackson Mixin 无法在 Pojo 到 json 中工作

c++ - 模仿 "pointer to a reference"的类可以保存超出范围的变量吗?

powershell - 绑定(bind)参数 'StorageContext' 出现问题

arrays - Powershell排序对象

powershell - 签署 PowerShell 脚本

javascript - 为什么我的变量不起作用,但定义却起作用?

javascript - JavaScript/Node.JS 中的变量声明和初始化

PHP - 将传入的 HTTP POST 转换为变量

xml - xpath:获取没有 X 祖先的节点

php - 第 1 行第 3 列错误 : xmlParsePI : no target name