【发布时间】:2018-07-09 17:36:16
【问题描述】:
我的 XML 看起来像这样:
<config>
<backup>
<environment>
<server name="exampleserver2" type="FM">
<utility hfmcopyapp="C:\Oracle\Middleware\EPMSystem11R1\products\FinancialManagement\Utilities\HfmCopyAppCmd_x64.exe"/>
<utility lcm="C:\Oracle\Middleware\user_projects\FM1\bin\Utility.bat"/>
</server>
</environment>
</backup>
</config>
我正在使用的 PowerShell 代码是(更新,反映了工作代码):
function Get-ServerAttrByXmlTag
{
[OutputType([string])]
param
(
[Parameter(Mandatory = $true)]
[string]$server,
[string]$type,
[string]$feature,
[string]$xmltag,
[string]$attribute
)
if ($type)
{
$Value = $xmlDoc.SelectSingleNode("//server[@name='$server' and @type='$type']/$xmltag/@$attribute").'#text'
}
else
{
$Value = $xmlDoc.SelectSingleNode("//server[@name='$server']/$xmltag/@$attribute").'#text'
}
$Value
}
我得到的错误是非终止的,函数能够找到属性。只是元素<utility>的第一次迭代没有包含lcm的属性,所以会抛出这个错误:
只要有多个<utility> 节点,如果第一个节点不包含$atttribute,我正在寻找的错误记录就会抛出。它最终会找到utility.lcm 路径,但并非没有抛出错误。
例如,如果我要查找utility.lcm,第一个实用程序节点不是lcm,而是hfmcopyapp。所以会抛出一个错误,因为没有找到lcm。
如何选择正确的节点/属性而不引发错误?
也没有重新排列 XML。它必须与给定的节点属性一起工作。
【问题讨论】:
标签: xml powershell