SyntaxError:prefix' a'在前缀地图中找不到

时间:2016-11-23 19:00:46

标签: python python-2.7 elementtree

我试图创建一个计算pptx文档中单词的函数。问题是我无法弄清楚如何只找到这种标签:

<a:t>Some Text</a:t>

当我尝试:print xmlTree.findall('.//a:t')时,它会返回

  

SyntaxError:prefix&#39; a&#39;在前缀地图中找不到

你知道该怎么做才能让它发挥作用吗?

这是功能:

def get_pptx_word_count(filename):
    import xml.etree.ElementTree as ET
    import zipfile
    z = zipfile.ZipFile(filename)
    i=0
    wordcount = 0
    while True:
        i+=1
        slidename = 'slide{}.xml'.format(i)
        try:
            slide = z.read("ppt/slides/{}".format(slidename))
        except KeyError:
            break
        xmlTree = ET.fromstring(slide)
        for elem in xmlTree.iter(): 
            if elem.tag=='a:t':
                #text = elem.getText
                #num = len(text.split(' '))
                #wordcount+=num

2 个答案:

答案 0 :(得分:0)

在ElementTree中指定名称空间的方法是:

{namespace}element

因此,您应该将查询更改为:

print xmlTree.findall('.//{a}t')

编辑:

@mxjn指出,如果a是前缀而不是URI,则需要插入URI而不是a:

 print xmlTree.findall('.//{http://tempuri.org/name_space_of_a}t')

或者您可以提供前缀映射:

 prefix_map = {"a": "http://tempuri.org/name_space_of_a"}
 print xmlTree.findall('.//a:t', prefix_map)

答案 1 :(得分:-3)

您需要告诉ElementTree您的XML命名空间。

参考文献: