给定以下 struct 的XML文件:

<log>
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
        <System>
            <EventID>1</EventID> # if this is 1
        </System>
        <EventData>
            <Data Name="CommandLine">C:\Windows\system32\wbem\unsecapp.exe -Embedding</Data> # then I want this value
        </EventData>
    </Event>
  <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
        <System>
            <EventID>2</EventID>
        </System>
        <EventData>
            <Data Name="CommandLine">C:\Windows\system32\wbem\unsecapp.exe -Embedding</Data>
        </EventData>
    </Event>
</log>

如果<EventID> = 1,我想判断所有<Event>,然后使用<Data Name='CommandLine'>的值

使用此代码

from lxml import etree as ET

with open(log_file_path, 'r', encoding='utf-8') as file:                                                                     
    log_content = file.read()   
root = ET.fromstring(log_content)

ns = {'ns' : 'http://schemas.microsoft.com/win/2004/08/events/event'}

root.xpath("//ns:Event[System/EventID='1']/EventData/Data[@Name='CommandLine']", namespaces=ns)

一无所获.

我用相同的XML在一个在线XPath工具中try 了相同的XPath查询//Event[System/EventID='1']/EventData/Data[@Name='CommandLine'],它可以正常工作.

我想不出这个问题,你有什么 idea 吗?

推荐答案

元素上的默认命名空间也适用于其后代元素,因此请更改

//ns:Event[System/EventID='1']/EventData/Data[@Name='CommandLine']

//ns:Event[ns:System/ns:EventID='1']/ns:EventData/ns:Data[@Name='CommandLine']

Python相关问答推荐

回归回溯-2D数组中的单词搜索

使用Python进行网页抓取,没有页面

如何在Power Query中按名称和时间总和进行分组

阅读Polars Python中管道的函数定义

请从Python访问kivy子部件的功能需要帮助

如何防止Plotly在输出到PDF时减少行中的点数?

计算所有前面行(当前行)中列的值

Pythind 11无法弄清楚如何访问tuple元素

更改matplotlib彩色条的字体并勾选标签?

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

如何让程序打印新段落上的每一行?

用合并列替换现有列并重命名

如何使用数组的最小条目拆分数组

如何在solve()之后获得症状上的等式的值

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

将tdqm与cx.Oracle查询集成

Pandas Loc Select 到NaN和值列表

Python—转换日期:价目表到新行

如何找出Pandas 图中的连续空值(NaN)?