Как использовать lxml findall() для поиска ключевого слова в элементах

У меня есть следующий ретро-список 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>

Поэтому я ищу что-то, что вернет игры, которые соответствуют названию, которое я ищу, в примере с "Super Baseball" должно быть возвращено вышеупомянутое (весь элемент игры). Идеи? Я пробовал 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 ответов

Другие вопросы по тегам