Mediawiki-Artikel parsen

engelmarkus

Erfahrenes Mitglied
Hallo zusammen!
Ich habe vor, einen Mediawiki-Artikel zu parsen und dann als Word-Dokument ausgeben zu lassen. Allerdings weiß ich nicht wirklich, wie ich am besten vorgehen soll.
Folgende Zeichen müsste ich aus dem Artikel rauslesen und verarbeiten:

= erzeugt eine große Überschrift =
== kleinere Überschrift ==
=== noch kleiner ===

[[Hyperlinktitel|http://www.adresse.de]]

Das waren mal die wichtigsten. So ein Hyperlink kann auch mitten im Text stehen, z.b. "Hier habe ich einen Link auf [[Google|http://www.google.de]] eingefügt.". Das heißt, ich will im Word-Dokument nur "Google" stehen haben, als Hyperlink auf "www.google.de".

Aber wie soll ich die Zeichen am besten verarbeiten? Ich muss die komplette Datei ja als Char() einlesen, oder?

Danke für eure Hilfe,
Markus
 
hehe
Um ehrlich zu sein an sowas ähnliches arbeite ich gerade selber und Mediawiki hat noch einige Überraschungen parat ;)

Ich behandle eigentlich alles größtenteils über Regex. Die meistens Sachen sind ja klar Strukturiert.
Aber wie gesagt Wiki aht noch viel mehr
Tabellen, Vorlagen, verschiedene Listen, HTML Tags.

Meine Objekthierarschie besteht derzeit aus 12 Objekten wobei ich HTML und Aufzählungen nicht nochmals unterteilt habe. Und ist auch noch nicht alles implementiert.

Aber hier mal meine Regex für die Titel ist eigentlich nixs besonderes:
Code:
^={1,6}(.*?)={1,6} *$

Bei Urls wirds schon wieder bissel komplizierter deshalb hier direkt mal Quellcode aus meinem Programm:
Code:
        /// <summary>
        /// RegEx: auf eigene Wiki Seite verwiesen ([[Seite]], [[Seite|Bezeichnung]])
        /// </summary>
        internal const string ParseUrlOwn = @"\[\[(.*?)\]\]";
        /// <summary>
        /// RegEx: Url ([Url], [Url Bezeichnung])
        /// </summary>
        internal const string ParseUrlWithTitle = @"\[(" + ParseUrl + @"(?( ).*?))\]";
        /// <summary>
        /// RegEx: URL im Text (ohne Wiki Tag, http://www.irgendwas.wie/wo)
        /// </summary>
        internal const string ParseUrl = @"(http[s]?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\." +
                               @")*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)" +
                               @"){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F" +
                               @"\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{" +
                               @"2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{" +
                               @"2}))|[;:@&=])*))?)?)";

An den Regex selber kann man bestimmt auch noch arbeiten, hatte da gerade erst begonnen richtig mit dennen zu arbeiten.
 
Zurück