首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图搜索EPG XML-data

试图搜索EPG XML-data
EN

Stack Overflow用户
提问于 2021-08-16 20:56:49
回答 1查看 342关注 0票数 3

我正在尝试以XML-格式(xmltv)搜索EPG (电子程序指南)。我想找到所有的节目,其中包含一个特定的文本,例如,哪些频道将显示一个特定的足球(足球)比赛今天。样本数据(实际数据为> 20000元素)

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="TX" generator-info-url="http://epg.net:8000/">
<channel id="GaliTV.es">
    <display-name>GaliTV</display-name>
    <icon src="http://logo.com/logos/GaliTV.png"/>
</channel>
<programme start="20210814080000 +0200" stop="20210814085500 +0200" channel="GaliciaTV.es" >
        <title>A Catedral de Santiago e o Mestre Mateo</title>
        <desc>Serie de catedral de Santiago de Compostela.</desc>
    </programme>
    <programme start="20210815050000 +0200" stop="20210815055500 +0200" channel="GaliciaTV.es" >
        <title>santiago</title>
        <desc>Chili.</desc>
    </programme>
</tv>

只有当<programme>desc属性包含特定文本(不区分大小写)时,我才想显示title属性。使用ElementTree,我尝试了这样的方法:

代码语言:javascript
复制
for title in root.findall("./programme/title"):
   match = re.search(r'Santiago',title.text)
   if match:
       print(title.text)

它将找到一个结果,但:

  1. 我得到了一个我不明白的错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/usr/lib/python2.7/re.py", line 146, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or buffer

  1. 我不知道如何搜索大小写不敏感,[Ss]antiago不工作。
  2. 我想从父元素返回结果(例如,
  3. )。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-16 21:47:05

你不需要阅读正则表达式,试一试

代码语言:javascript
复制
for title in doc.findall('.//programme//title'):
    if "santiago" in title.text.lower():
        print(title.text)

示例的输出应该是

代码语言:javascript
复制
A Catedral de Santiago e o Mestre Mateo
santiago

编辑:

要从每个programme获取所有数据,请尝试如下:

代码语言:javascript
复制
for prog in doc.findall('.//programme'):
    title = prog.find('title').text
    if "santiago" in title.lower():      
        start,stop,channel = prog.attrib.values()
        desc = prog.find('.//desc').text
        print(start,stop,channel,'\n',title,'\n',desc)
        print('-----------')

输出:

代码语言:javascript
复制
20210814080000 +0200 20210814085500 +0200 GaliciaTV.es 
 A Catedral de Santiago e o Mestre Mateo 
 Chili.
-----------
20210815050000 +0200 20210815055500 +0200 GaliciaTV.es 
 santiago 
 Chili.

我还要补充一点,如果xml变得更加复杂,那么从ElementTree切换到lxml可能是个好主意,因为后者有更好的xpath支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68809117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档