Skip to main content
 首页 » 编程设计

python之XML 搜索 python

2025年05月04日43del

我有下一个类型的 XML:

<OUTPUT> 
    <HEADER> 
 
    </HEADER> 
    <REGISTER> 
        <RESULT>0</RESULT> 
        <KEY1>CAR</KEY1> 
        <KEY2>RED</KEY2> 
        <KEY3>2013</KEY3> 
        <ATTRIBUTE1>2000</ATTRIBUTE1> 
        <ATTRIBUTE2>100000</ATTRIBUTE2> 
    </REGISTER> 
    <REGISTER> 
        <RESULT>0</RESULT> 
        <KEY1>TRUCK</KEY1> 
        <KEY2>BLUE</KEY2> 
        <KEY3>2014</KEY3> 
        <ATTRIBUTE1>3000</ATTRIBUTE1> 
        <ATTRIBUTE2>400000</ATTRIBUTE2> 
    </REGISTER> 
<OUTPUT> 

如果 KEY1、KEY2、KEY3 有一些值而不在 python 中循环,我如何搜索 ATTRIBUTE1 的值? (某种c#的lambda表达式)

感谢@CommuSoft,我知道我可以使用带有 libxml2 的 Xpath 查询。但是当我尝试使用 pip install libxml2-python 安装它时,我发现了错误

Could not find any downloads that satisfy the requirement libxml2-python 

另外我忘了说我在 anaconda 和 windows 上使用 python 2.7。

请您参考如下方法:

一般来说,最好使用库来处理 XML,在这种情况下,特别是使用 XPath query。 .

import libxml2 
 
doc = libxml2.parseFile("tst.xml") 
ctxt = doc.xpathNewContext() 
res = ctxt.xpathEval("//REGISTER/ATTRIBUTE1[../KEY1/text()='TRUCK' and ../KEY2/text()='BLUE' and ../KEY3/text()='2014']") 
 
doc.freeDoc() 
ctxt.xpathFreeContext() 

这里的查询是:

//REGISTER/ATTRIBUTE1[../KEY1/text()='TRUCK' and ../KEY2/text()='BLUE' and ../KEY3/text()='2014'] 

结果存储在res中。