【问题标题】:Powershell xml check valuesPowershell xml 检查值
【发布时间】:2021-12-13 15:45:59
【问题描述】:

我正在遍历存储在 $docs 中的多个 xml 文件。我想检查某些标签是否没有所需的值并在那里打印相应的 ID。但在某些 xml 文件中,所有标签可能都不存在,我想排除/跳过该标签。 下面是我的代码,它会打印带有错误值的 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

if ($Cname -notin $vals -or $Cno -notin $vals -or $Cfloor -notin $vals) {
echo $id
}

示例 xml 文件 1

<com.xyz.abc.123>
<bill>
 <Id>1298</Id>
  <reg>33p</reg>
</bill>
<Class>
  <Name>rxid</Name>
  <Desc>xyz</Desc>
  <ComName>rxid</ComName>
</Class>
</com.xyz.abc.123>

我得到的输出是 id 1298,因为 &lt;FloorName&gt; 不存在于 xml 文件中,但它不应该是 &lt;Name&gt;&lt;ComName&gt; 值存在于 $vals 所以我想要它跳过它。

示例 xml 文件 1

<com.xyz.abc.123>
<bill>
 <Id>6548</Id>
  <reg>33p</reg>
</bill>
<Class>
  <Name>ferid</Name>
  <Desc>xyz</Desc>
  <ComName>rxid</ComName>
</Class>
</com.xyz.abc.123>

我得到的输出是 id 6548,这是正确的,因为 &lt;Name&gt;ferid&lt;/Name&gt; 不在 $vals 中。

【问题讨论】:

  • 你可以为“tag aint there”添加一个测试吗?
  • Id.bill.Id,而不是.title.Id。请提供一个准确的示例以供使用
  • @Theo 对不起!我已经改正了
  • @Lee_Dailey 我即兴提出了这个问题,希望现在可以理解。
  • 所以.. 如果我明白了,你想要if ($Cname -in $vals -and $Cno -in $vals -and $Cfloor -in $vals) { echo $id } ??

标签: xml powershell


【解决方案1】:

这将捕获丢失的标签。

$ErrorActionPreference = "Stop"
Try {
      $Cfloor=$xd.'com.xyz.abc.123'.Class.FloorName
      $ErrorActionPreference = "Continue"
      if ($Cname -notin $vals -or 
          $Cno -notin $vals -or 
          $Cfloor -notin $vals) {
      echo $id
    }
}
Catch { 
         #Place processing for missing FloorName here! 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2022-01-27
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多