我正在尝试从Microsoft Word文档解析Open XML。但是,每当我查看任何标记或属性时,我都会收到我想要的标记,前面是openxmlformats名称空间。以下示例。有谁知道我如何删除它,只收到我的标签ID和值?
当前格式:
for content in root.iter():
print(content.tag)
返回:
'{http://schemas.openxmlformats.org/wordprocessingml/2006/main}tag'
和
for content in root.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}tag'):
print(content.attrib)
返回
'{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val': 'Orange'
期望输出:
for content in root.iter():
print(content.tag)
返回
tag
和
for content in root.iter('tag'):
print(content.attrib)
返回
val : 'Orange'
答案 0 :(得分:0)
您可以编写自己的迭代器版本来执行您想要的操作:
from collections import namedtuple
import re
my_content = namedtuple('my_content', ['tag', 'attrib'])
def remove_namespace(name):
return re.sub('^\{[^\}]\}', '', name)
def my_iterator(root, tag=None, namespace='{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'):
iterator = root.iter() if tag is None else root.iter(namespace + tag)
for content in iterator:
tag = remove_namespace(content.tag)
attrib = {remove_namespace(key): val for key, val in content.attrib.items()}
yield my_content(tag, attrib)
这将返回仅具有tag
和attrib
属性的对象。如果需要更详细的功能,则必须编写更复杂的代理对象。您可以使用生成器替代前一个:
for content in my_iter(root):
print(content.tag)
和
for content in my_iter(root, 'tag'):
print(content.attrib)