解析XML以获取特定值-PowerShell

时间:2020-06-25 19:25:07

标签: xml powershell xpath

因此,我正在尝试编写一个脚本,以仅从值是特定单词的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值。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在“ #text”下查找:

from django.contrib.sitemaps import Sitemap, GenericSitemap
from django.shortcuts import reverse
from .models import WebSite, Article, Settings


class StaticViewSitemap(Sitemap):
    def items(self):
        urls = ['index', 'about']

        if Settings().get_value('general_use_blog'):
            urls.append('blog')

        return urls

    def location(self, item):
        return reverse(item)

class WebSiteSitemap(Sitemap):
    @staticmethod
    def sitemap():
        return GenericSitemap(
            {
                'queryset': WebSite.objects.filter(visible=True),
                'date_field': 'modified_date',
            },
            priority=0.9)

class ArticleSitemap(Sitemap):
    @staticmethod
    def sitemap():
        if not Settings().get_value('general_use_articles'):
            return GenericSitemap({'queryset': Article.objects.none()})
        return GenericSitemap(
            {
                'queryset': Article.objects.filter(allow_publication=True, visible=True),
                'date_field': 'modified_date'
            },
            priority=1)

答案 1 :(得分:0)

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

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

或@ js2010概述:

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