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