【问题标题】:SyntaxError: prefix 'a' not found in prefix mapSyntaxError:在前缀映射中找不到前缀“a”
【发布时间】:2023-04-03 09:49:02
【问题描述】:

我正在尝试创建一个计算pptx 文档中单词的函数。问题是我不知道如何只找到这种标签:

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

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

SyntaxError: 在前缀映射中找不到前缀“a”

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

这是函数:

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

【问题讨论】:

标签: python python-2.7 elementtree


【解决方案1】:

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)

【讨论】:

  • 这行不通。 a 是前缀,而不是实际的命名空间 URI。
【解决方案2】:

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

参考资料:

【讨论】:

  • 仅链接的答案并不是特别有用。解决此问题的任何相关信息都应包含在答案本身中。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 2011-02-18
  • 2012-03-29
  • 1970-01-01
  • 2014-05-30
  • 2011-10-20
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多