XML export adjusted
This commit is contained in:
@@ -17,6 +17,39 @@ import parsedatetime
|
||||
calendar=parsedatetime.Calendar()
|
||||
|
||||
|
||||
def _parse_markdown_table(markdown_content):
|
||||
"""
|
||||
Parse markdown table content and return XML element with <table><header><row><column> structure
|
||||
"""
|
||||
lines = [line.strip() for line in markdown_content.strip().split('\n') if line.strip()]
|
||||
if not lines:
|
||||
return None
|
||||
|
||||
# Create table element
|
||||
table = ET.Element('table')
|
||||
|
||||
# Parse first row as header
|
||||
header_row = [cell.strip() for cell in lines[0].split('|') if cell.strip()]
|
||||
header = ET.SubElement(table, 'header')
|
||||
for cell in header_row:
|
||||
column = ET.SubElement(header, 'column')
|
||||
column.text = cell
|
||||
|
||||
# Parse remaining rows (skip separator row if it exists)
|
||||
for line in lines[2:] if len(lines) > 1 and all(c in '-| ' for c in lines[1]) else lines[1:]:
|
||||
# Check if this is a separator row
|
||||
if all(c in '-| ' for c in line):
|
||||
continue
|
||||
|
||||
row = ET.SubElement(table, 'row')
|
||||
row_cells = [cell.strip() for cell in line.split('|') if cell.strip()]
|
||||
for cell in row_cells:
|
||||
column = ET.SubElement(row, 'column')
|
||||
column.text = cell
|
||||
|
||||
return table
|
||||
|
||||
|
||||
def standard_list(request):
|
||||
dokumente = Dokument.objects.all()
|
||||
return render(request, 'standards/standard_list.html',
|
||||
@@ -294,20 +327,34 @@ def standard_xml(request, nummer):
|
||||
geltungsbereich_sections = dokument.geltungsbereich_set.all().order_by('order')
|
||||
if geltungsbereich_sections:
|
||||
geltungsbereich_element = ET.SubElement(root, 'Geltungsbereich')
|
||||
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||
for gb in geltungsbereich_sections:
|
||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
||||
section.set('typ', gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text")
|
||||
section.text = gb.inhalt
|
||||
section_type = gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text"
|
||||
if section_type in ('tabelle', 'table'):
|
||||
table = _parse_markdown_table(gb.inhalt)
|
||||
if table is not None:
|
||||
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||
abschnitt_element.set('typ', section_type)
|
||||
abschnitt_element.append(table)
|
||||
else:
|
||||
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||
abschnitt_element.set('typ', section_type)
|
||||
abschnitt_element.text = gb.inhalt
|
||||
|
||||
einleitung_sections = dokument.einleitung_set.all().order_by('order')
|
||||
if einleitung_sections:
|
||||
einleitung_element = ET.SubElement(root, 'Einleitung')
|
||||
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||
for ei in einleitung_sections:
|
||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
||||
section.set('typ', ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text")
|
||||
section.text = ei.inhalt
|
||||
section_type = ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text"
|
||||
if section_type in ('tabelle', 'table'):
|
||||
table = _parse_markdown_table(ei.inhalt)
|
||||
if table is not None:
|
||||
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||
abschnitt_element.set('typ', section_type)
|
||||
abschnitt_element.append(table)
|
||||
else:
|
||||
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||
abschnitt_element.set('typ', section_type)
|
||||
abschnitt_element.text = ei.inhalt
|
||||
|
||||
ET.SubElement(root, 'Ziel').text = ""
|
||||
ET.SubElement(root, 'Grundlagen').text = ""
|
||||
@@ -341,20 +388,34 @@ def standard_xml(request, nummer):
|
||||
kurztext_sections = vorgabe.vorgabekurztext_set.all().order_by('order')
|
||||
if kurztext_sections:
|
||||
kurztext_element = ET.SubElement(vorgabe_el, 'Kurztext')
|
||||
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||
for kt in kurztext_sections:
|
||||
teil = ET.SubElement(abschnitt, 'Teil')
|
||||
teil.set('typ', kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text")
|
||||
teil.text = kt.inhalt
|
||||
section_type = kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text"
|
||||
if section_type in ('tabelle', 'table'):
|
||||
table = _parse_markdown_table(kt.inhalt)
|
||||
if table is not None:
|
||||
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||
abschnitt.set('typ', section_type)
|
||||
abschnitt.append(table)
|
||||
else:
|
||||
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||
abschnitt.set('typ', section_type)
|
||||
abschnitt.text = kt.inhalt
|
||||
|
||||
langtext_sections = vorgabe.vorgabelangtext_set.all().order_by('order')
|
||||
if langtext_sections:
|
||||
langtext_element = ET.SubElement(vorgabe_el, 'Langtext')
|
||||
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||
for lt in langtext_sections:
|
||||
teil = ET.SubElement(abschnitt, 'Teil')
|
||||
teil.set('typ', lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text")
|
||||
teil.text = lt.inhalt
|
||||
section_type = lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text"
|
||||
if section_type in ('tabelle', 'table'):
|
||||
table = _parse_markdown_table(lt.inhalt)
|
||||
if table is not None:
|
||||
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||
abschnitt.set('typ', section_type)
|
||||
abschnitt.append(table)
|
||||
else:
|
||||
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||
abschnitt.set('typ', section_type)
|
||||
abschnitt.text = lt.inhalt
|
||||
|
||||
referenz_element = ET.SubElement(vorgabe_el, 'Referenzen')
|
||||
for ref in vorgabe.referenzen.all():
|
||||
|
||||
Reference in New Issue
Block a user