【问题标题】:Parsing XML for specific Value - PowerShell解析特定值的 XML - PowerShell
【发布时间】:2020-10-16 08:32:52
【问题描述】:

所以我有一个脚本,我正在尝试编写只从 XML 文件中提取数据,其中值是一个特定的单词。

这就是我的 XML 的样子:

  <Scan>
    <ScanDate>2020-06-25T08:58:31.7792998-04:00</ScanDate>
    <ValidatedOnline>true</ValidatedOnline>
  </Scan>

我特意在找哪里

<ValidatedOnline>false</ValidatedOnline>

这就是我的 PowerShell 的样子:

$DevicePath = 'tcphost\file.xml'
[xml]$Scans = Get-Content $DevicePath
$DateTime = Get-Date
Select-Xml -Xml $Scans -XPath "//ValidatedOnline" | 
    Where-Object {$_.Node -match "false"} |
    Select -Property $DateTime.ToString(), $DevicePath -ExpandProperty node | 
    Out-File -FilePath 'destination\destination.txt' -NoClobber -Append

我遇到的问题是 Where-Object。我一生都无法弄清楚如何正确获取我正在寻找的内容,即 XML 的 ValidatedOnline 部分中的 false 值。有什么想法吗?

【问题讨论】:

    标签: xml powershell xpath


    【解决方案1】:

    在“#text”下查看:

    Select-Xml -Xml $Scans -XPath "//ValidatedOnline" | % node
    
    #text
    -----
    true
    

    【讨论】:

      【解决方案2】:

      你可以尝试直接用 XPath 选择节点:

      Select-Xml -Xml $Scans -XPath "//ValidatedOnline[.="false"]" | 
           Select -Property $...
      

      或如@js2010 所述:

      Select-Xml -Xml $Scans -XPath "//ValidatedOnline" | 
          Where-Object {$_.Node.'#text' -match "false"} 
      

      【讨论】:

        猜你喜欢
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多