如何使用lxml findall()在元素

时间:2018-03-26 20:33:43

标签: python lxml keyword findall

我有以下RetroPie gamelist.xml,我试图使用lxml的findall()返回游戏元素。我想让它返回接近我正在搜索的标题的匹配,或者甚至是基于我正在搜索的标题的一部分。

<gameList>
 <game id="2652" source="ScreenScraper">
          <path>/home/pi/RetroPie/roms/snes/2020 Super Baseball (U).smc</path>
          <name>SUPER BASEBALL 2020</name>
          <desc>* shortened *</desc>
          <image>/home/pi/RetroPie/media/snes/2020 Super Baseball (U)-  image.png</image>
          <marquee/>
          <video>/home/pi/RetroPie/media/snes/2020 Super Baseball (U)-          video.mp4</video>
          <thumbnail/>
          <rating>0.9</rating>
          <releasedate>19930713T000000</releasedate>
          <developer>Pallas</developer>
          <publisher>SNK</publisher>
          <genre>Sports</genre>
          <players>1-2</players>
     </game>
</gameList>

所以我正在寻找能够回归与我正在寻找的游戏相匹配的游戏的东西,例如&#34; Super Baseball&#34;应返回以上内容(整个游戏元素)。想法?我尝试过xpath和其他东西,但我没有能力让它按预期工作。

类似的东西:

 #!/usr/bin/env python3

 from lxml import etree

 tree = etree.parse("/home/pi/scripts/jscraper2/repackxml/snes/gamelist.xml")
 root = tree.getroot()

 strGame = "Super Baseball 2020"
 for game in root.findall("game/name/"+strGame):
     print(game)

当然,什么都不返回。我可以逐个通过游戏并寻找完全匹配,但这似乎很慢,我觉得必须有一个更简单的方法来做到这一点:

 for game in root:
     strName = ""
     for ele in game:
         if ele.tag == "name":
             strName = str(ele.text)
             if strName.lower() == gameName.lower():
                 # at this point, game would be the element

也许甚至有一些正则表达式,我可以用上面的内容来寻找部分名称匹配。无论如何,任何帮助都会很棒。谢谢!

0 个答案:

没有答案