# Bash: XML transformieren



## SebCon (24. November 2007)

hallo, 
für eine aufgabenstellung mit regulären ausdrücken müssen wir folgende aufgabenstellung bearbeiten:

und eine xml-zeile darf nur wie folgt aufgebaut sein:
* Der Tagname beginnt mit einem Buchstaben. Es folgen beliebig viele Buchstaben oder Ziffern.
* Attributnamen besitzen denselben Aufbau wie Tagnamen.
* Attributwerte bestehen aus Buchstaben, Ziffern oder den Zeichen ?+* :;_- und dürfen nicht leer sein.
* Der Inhalt eines Tags besteht entweder nur aus weiteren Tags oder aus Text. Gemischter Inhalt (Tags und Text) ist nicht gültig.
* Textueller Inhalt besteht aus beliebigen Zeichen (Null oder mehrere), jedoch ohne die spitzen Klammern < und >, da diese den Anfang bzw. das Ende eines Tags definieren.
* Der Name des Tags folgt unmittelbar auf die öffnende spitze Klammer.
* Es steht maximal ein Tag auf jeder Zeile der XML-Datei. Hierbei kann es sich entweder a) nur um das Starttag, b) nur das Endetag, c) ein leeres Tag oder d) ein Starttag gefolgt von Text und dem zugehörigen Endetag handeln. Im Fall d) stehen Start- und Endetag immer auf einer Zeile, so dass kein Umbruch im Text vorhanden sein kann!
* Ein leeres Tag kann auf zwei unterschiedliche Arten geschrieben werden: a) <foo></foo> oder b) <foo />
* Attribute sind nur in einem Starttag oder in einem leeren Tag <foo /> erlaubt.
* Attribute sind durch ein oder mehrere Leerzeichen voneinander getrennt und besitzen immer das Format: attributname="attributwert"
* Der Name des Start- und Endetags sind vollständig identisch. Dieses wird immer der Fall sein und muss von euch nicht geprüft werden.


jetzt habe ich noch das problem:
Die Prüfung soll dabei für jede Zeile der XML-Datei durch genau einen regulären Ausdruck erfolgen. Der reguläre Ausdruck darf dabei natürlich aus einzelnen Bestandteilen zusammengebaut sein.

wie kann man diese ganzen regeln in einem ausdruck zusammenfassen?
bin für jede hilfe dankbar.

mfg sebcon


----------

