Lxml元素与命名空间相等

2024-04-28 12:09:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Lxml解析.docx文档的内容。我知道lxml将名称空间前缀替换为实际的名称空间,但是这使得检查我使用的是哪种元素标记非常困难。我想做点类似的事情

if (someElement.tag == "w:p"):

但是由于lxml坚持在完整的名称空间前面加上前缀,所以我要么做一些类似的事情

if (someElemenet.tag == "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p'):

或者从元素的nsmap属性中执行完整名称空间名称的查找,如下所示

targetTag = "{%s}p" % someElement.nsmap['w']
if (someElement.tag == targetTag):

如果有更简单的方法说服lxml

  1. 给我一个没有附加名称空间的标记字符串,我可以使用prefix属性和这个信息来检查我使用的是哪个标记或
  2. 只需给我使用前缀的标记字符串

在编写这个解析器时,这将节省很多击键。这可能吗?我在文件里遗漏了什么吗?


Tags: 字符串文档标记名称if属性tag空间