def convert(self): if len(self.cargs) < 3: raise CommandError("Convert requires 2 arguments") xml_path = self.cargs[1] xslt_path = self.cargs[2] out_file = self.cargs[3] if len(self.cargs) > 3 else None xml_string = utils.readFile(xml_path) xml_string = re.sub(ur"\bxmlns=", ur"xmlns2=", xml_string) # TODO: remove this hack, only for odt conversion # position 33% is like 'super' style xml_string = re.sub(ur'"-33%', ur'"sub', xml_string) xml_string = re.sub(ur'"33%', ur'"super', xml_string) xslt_string = utils.readFile(xslt_path) # replacements in the XSLT comments, xslt_string = self.parse_xslt_directives(xslt_string, xml_string) ret = str(dputils.get_xslt_transform(xml_string, xslt_string)) if out_file: dputils.write_file(out_file, str(comments) + ret, encoding=None) else: print str(comments) + ret return ret
def convert(self): if len(self.cargs) < 3: raise CommandError('Convert requires 2 arguments') xml_path = self.cargs[1] xslt_path = self.cargs[2] out_file = self.cargs[3] if len(self.cargs) > 3 else None xml_string = utils.readFile(xml_path) xml_string = re.sub(ur'\bxmlns=', ur'xmlns2=', xml_string) # TODO: remove this hack, only for odt conversion # position 33% is like 'super' style xml_string = re.sub(ur'"-33%', ur'"sub', xml_string) xml_string = re.sub(ur'"33%', ur'"super', xml_string) xslt_string = utils.readFile(xslt_path) # replacements in the XSLT comments, xslt_string = self.parse_xslt_directives(xslt_string, xml_string) ret = str(dputils.get_xslt_transform(xml_string, xslt_string)) if out_file: dputils.write_file(out_file, str(comments) + ret, encoding=None) else: print str(comments) + ret return ret
def convert_response(cls, data, format=None, jsonpcallback=None, xslt=None): '''Convert a json response (data) into another format Allowed formats: * json * jsonp (jsonpcallback must also be provided) * xml ''' mimetype = 'application/json' is_webpage = False if format == 'jsonp': data = u';%s(%s);' % (jsonpcallback, data) mimetype = 'text/javascript' if xslt: format = 'xml' if format == 'xml': from django.utils.html import escape def get_xml_from_entry(entry=None): ret = u'' if isinstance(entry, dict): for k, v in entry.iteritems(): ret += u'<%s>%s</%s>' % (k, get_xml_from_entry(v), k) elif isinstance(entry, list) or isinstance(entry, tuple): ret = u'' for v in entry: ret += u'<item>%s</item>' % get_xml_from_entry(v) elif isinstance(entry, bool): ret += '1' if entry else '0' elif entry is None: ret += '' else: ret += u'%s' % escape(entry) return ret prolog = u'<?xml version="1.0" encoding="UTF-8"?>' data = u'%s<response>%s</response>' % ( prolog, get_xml_from_entry(json.loads(data))) mimetype = 'text/xml' if xslt: from digipal.models import ApiTransform transforms = ApiTransform.objects.filter(slug=xslt.lower().strip()) if transforms.count(): transform = transforms[0] template = transform.template # apply the transform data = utils.get_xslt_transform(data, template) mimetype = transform.mimetype is_webpage = transform.webpage return data, mimetype, is_webpage
def get_tei_from_text_response(response, item_partid, content_type): ret = response.get('content', '') # decode entities (e.g. ’) # TODO: make sure we keep core XML entities otherwise it may cause # parsing errors down the line from HTMLParser import HTMLParser parser = HTMLParser() ret = parser.unescape(ret) # convert & back to & to keep XML well-formed ret = ret.replace(u'&', u'&') # convert to XML object #xml = dputils.get_xml_from_unicode(ret, ishtml=True, add_root=True) #print repr(response) from digipal.models import ItemPart itempart = ItemPart.objects.filter(id=item_partid).first() tcx = TextContentXML.objects.filter(text_content__type__slug='translation', text_content__item_part__id=item_partid).first() # #print ret from django.template.loader import render_to_string context = { 'meta': { 'title': '%s of %s' % (content_type.title(), itempart), 'ms': { 'place': itempart.current_item.repository.place.name, 'repository': itempart.current_item.repository.name, 'shelfmark': itempart.current_item.shelfmark, }, 'edition': { 'date': tcx.modified }, 'project': settings.SITE_TITLE, 'authority': settings.SITE_TITLE, }, } template = render_to_string('digipal_text/tei_from_xhtml.xslt', context) ret = dputils.get_xslt_transform('<root>%s</root>' % ret, template) ret = dputils.get_unicode_from_xml(xmltree=ret).replace('xmlns=""', '') # convert XML to string #ret = dputils.get_unicode_from_xml(xml, remove_root=True) return ret
def get_tei_from_text_response(response, item_partid, content_type): ret = response.get('content', '') # decode entities (e.g. ’) # TODO: make sure we keep core XML entities otherwise it may cause # parsing errors down the line from HTMLParser import HTMLParser parser = HTMLParser() ret = parser.unescape(ret) # convert & back to & to keep XML well-formed ret = ret.replace(u'&', u'&') # convert to XML object #xml = dputils.get_xml_from_unicode(ret, ishtml=True, add_root=True) from digipal.models import ItemPart itempart = ItemPart.objects.filter(id=item_partid).first() tcx = TextContentXML.objects.filter( text_content__type__slug='translation', text_content__item_part__id=item_partid).first() # from django.template.loader import render_to_string context = { 'meta': { 'title': '%s of %s' % (content_type.title(), itempart), 'ms': { 'place': itempart.current_item.repository.place.name, 'repository': itempart.current_item.repository.name, 'shelfmark': itempart.current_item.shelfmark, }, 'edition': { 'date': tcx.modified }, 'project': settings.SITE_TITLE, 'authority': settings.SITE_TITLE, }, } template = render_to_string('digipal_text/tei_from_xhtml.xslt', context) ret = dputils.get_xslt_transform('<root>%s</root>' % ret, template) ret = dputils.get_unicode_from_xml(xmltree=ret).replace('xmlns=""', '') # convert XML to string #ret = dputils.get_unicode_from_xml(xml, remove_root=True) return ret
def convert(self): if len(self.cargs) < 3: raise CommandError('Convert requires 2 arguments') xml_path = self.cargs[1] xslt_path = self.cargs[2] xml_string = utils.readFile(xml_path) xml_string = re.sub(ur'\bxmlns=', ur'xmlns2=', xml_string) xslt_string = utils.readFile(xslt_path) # replacements in the XSLT xslt_string = self.parse_xslt_directives(xslt_string, xml_string) ret = dputils.get_xslt_transform(xml_string, xslt_string) print str(ret) return ret