You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell遍历XML校验标签值时缺失标签误输出问题求解

问题原因

你当前的判断逻辑没有区分「标签不存在(值为空)」和「标签存在但取值不合法」两种场景,XML中不存在的节点取值为$null,$null肯定不在$vals列表里,所以会触发误判。

修改方案

调整判断逻辑:仅当标签存在(取值非空)时才执行合法性校验,所有存在的标签都合法就不输出ID,只要有一个存在的标签不合法就输出ID。
修改后的代码如下:

$vals= ('sslop','mlop','rxid')
Foreach ($xd in $docs)
{
    $id = $xd.'com.xyz.abc.123'.bill.Id
    $Cname = $xd.'com.xyz.abc.123'.Class.Name
    $Cno = $xd.'com.xyz.abc.123'.Class.ComName
    $Cfloor = $xd.'com.xyz.abc.123'.Class.FloorName

    # 定义非法标记,初始为否
    $invalid = $false
    # 逐个字段校验:仅非空字段需要判断是否合法
    if ($Cname -and $Cname -notin $vals) { $invalid = $true }
    if ($Cno -and $Cno -notin $vals) { $invalid = $true }
    if ($Cfloor -and $Cfloor -notin $vals) { $invalid = $true }

    # 只要有一个字段非法就输出ID
    if ($invalid) {
        Write-Output $id
    }
}

验证说明

  • 针对示例XML1:$Cfloor为空,跳过校验,$Cname和$Cno都在允许列表,$invalid为$false,不会输出ID,符合预期
  • 针对示例XML2:$Cname非空且取值不在列表中,$invalid为$true,输出ID 6548,符合预期

内容的提问来源于stack exchange,提问作者Mayhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:06:04