选择源包含字符串的事件日志记录的XPath

问题描述 投票:0回答:1

我正在编写一个 XPath 查询字符串来从 Windows 事件日志中选择记录,其中事件源包含特定字符串。我有一个版本可以执行精确匹配,其中查询的 Path 元素是

Path='Application'>*[System[Provider[@Name='MyApp']

这工作正常,但我想找到源包含“MyApp”的所有事件。我读过各种文章,我认为应该是

Path='Application'>*[System[Provider[contains(@Name, 'MyApp']

但这会失败并出现“无效查询错误”。

知道我做错了什么吗?

谢谢

c# xpath event-log
1个回答
0
投票
  1. 您发布的 XPath 缺少

    )
    的结束
    contains()
    和几个级别的结束谓词
    ]

    *[System[Provider[contains(@Name, 'MyApp']
    

    应该是

    *[System[Provider[contains(@Name, 'MyApp')]]]
    
  2. 更传统的是,对于顶级

    Event
    元素,这将被写入

    /Event[System/Provider[contains(@Name, 'MyApp')]]
    
  3. 考虑通常涉及的命名空间。 给定以下示例 Windows 事件日志 XML,

    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
      <System>
        <Provider Name="Microsoft-Windows-Security-Auditing" 
                  Guid="{12345678-1234-1234-1234-123456789012}" />
      </System>
    </Event>
    

    通过声明命名空间前缀,

    e = "http://schemas.microsoft.com/win/2004/08/events/event"
    

    并在您的 XPath 中使用它,

    /e:Event[e:System/e:Provider[contains(@Name, 'MyApp')]]
    

    请参阅 XPath 如何处理 XML 命名空间? 了解如何在 XPath 中声明和使用(或在必要时取消)命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.