Difficulty Creating Lxml Element Subclass
I’m trying to create a subclass of the Element class. I’m having trouble getting started though. from lxml import etree try: import docx except ImportError: from docx i
Solution 1:
I don't really get why you want to use a separate class named File.
As Michael0x2a said, you did'nt put a document tag, so it won't work (I don't think Word 2007 can read your file too)
But here is the corrected code:
from lxml import etree
try:
import docx
except ImportError:
from docx import docx
classFile(object):
defmakeelement(tagname, tagtext=None, nsprefix='w', attributes=None,
attrnsprefix=None):
'''Create an element & return it'''# Deal with list of nsprefix by making namespacemap
namespacemap = Noneifisinstance(nsprefix, list):
namespacemap = {}
for prefix in nsprefix:
namespacemap[prefix] = nsprefixes[prefix]
# FIXME: rest of code below expects a single prefix
nsprefix = nsprefix[0]
if nsprefix:
namespace = '{'+nsprefixes[nsprefix]+'}'else:
# For when namespace = None
namespace = ''
newelement = etree.Element(namespace+tagname, nsmap=namespacemap)
# Add attributes with namespacesif attributes:
# If they haven't bothered setting attribute namespace, use an empty# string (equivalent of no namespace)ifnot attrnsprefix:
# Quick hack: it seems every element that has a 'w' nsprefix for# its tag uses the same prefix for it's attributesif nsprefix == 'w':
attributenamespace = namespace
else:
attributenamespace = ''else:
attributenamespace = '{'+nsprefixes[attrnsprefix]+'}'for tagattribute in attributes:
newelement.set(attributenamespace+tagattribute,
attributes[tagattribute])
if tagtext:
newelement.text = tagtext
return newelement
def__init__(self):
super(File,self).__init__()
self.document = self.makeelement('document')
self.document.append(self.makeelement('body'))
f = File()
relationships = docx.relationshiplist()
title = 'File'
subject = 'A very special File'
creator = 'Me'
keywords = ['python', 'Office Open XML', 'Word']
coreprops = docx.coreproperties(title=title, subject=subject, creator=creator,
keywords=keywords)
appprops = docx.appproperties()
contenttypes = docx.contenttypes()
websettings = docx.websettings()
wordrelationships = docx.wordrelationships(relationships)
docx.savedocx(f.document, coreprops, appprops, contenttypes, websettings,
wordrelationships, 'file.docx')
Post a Comment for "Difficulty Creating Lxml Element Subclass"