Wiki source code of Export To Markdown
Last modified by Tobias Wintrich on 2026/03/27 13:39
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{groovy}} | ||
| 2 | import org.xwiki.model.reference.EntityReferenceSerializer | ||
| 3 | import java.io.File | ||
| 4 | |||
| 5 | if (request.get('confirm') == '1') { | ||
| 6 | |||
| 7 | // Zielverzeichnis | ||
| 8 | def exportDir = new File("/usr/local/xwiki/data/md-export") | ||
| 9 | exportDir.mkdirs() | ||
| 10 | |||
| 11 | // Serializer für Ordnerstruktur | ||
| 12 | def pathSerializer = services.component.getInstance( | ||
| 13 | EntityReferenceSerializer.TYPE_STRING, "fspath" | ||
| 14 | ) | ||
| 15 | |||
| 16 | // Query (einzeilig!) | ||
| 17 | def query = "select doc.fullName from Document doc " + | ||
| 18 | "where (doc.space like 'HowTos' or doc.space like 'HowTos.%') " + | ||
| 19 | "and doc.hidden = false" | ||
| 20 | |||
| 21 | def results = services.query.xwql(query).execute() | ||
| 22 | |||
| 23 | for (fullName in results) { | ||
| 24 | |||
| 25 | println("* Exporting " + fullName) | ||
| 26 | |||
| 27 | def doc = xwiki.getDocument(fullName) | ||
| 28 | |||
| 29 | if (doc.isHidden()) { | ||
| 30 | continue | ||
| 31 | } | ||
| 32 | |||
| 33 | // Markdown erzeugen | ||
| 34 | def markdown = services.rendering.render(doc.getXDOM(), "markdown/1.2") | ||
| 35 | |||
| 36 | // Fix für XWiki Image Syntax ![[file|text]] | ||
| 37 | markdown = markdown.replaceAll( | ||
| 38 | /!\[\[([^|\]]+)\|([^\]]+)\]\]/, | ||
| 39 | '' | ||
| 40 | ) | ||
| 41 | |||
| 42 | // Dateipfad erzeugen | ||
| 43 | def relativePath = pathSerializer.serialize(doc.documentReference) | ||
| 44 | def outputFile = new File(exportDir, relativePath + ".md") | ||
| 45 | |||
| 46 | outputFile.parentFile.mkdirs() | ||
| 47 | outputFile.write(markdown, "UTF-8") | ||
| 48 | |||
| 49 | println(" -> Saved page to " + outputFile) | ||
| 50 | |||
| 51 | // Anhänge exportieren | ||
| 52 | for (attachment in doc.getAttachmentList()) { | ||
| 53 | |||
| 54 | def attachmentFile = new File(outputFile.parentFile, attachment.getFilename()) | ||
| 55 | |||
| 56 | attachmentFile.withOutputStream { os -> | ||
| 57 | os << attachment.getContentInputStream() | ||
| 58 | } | ||
| 59 | |||
| 60 | println(" -> Exported attachment " + attachment.getFilename()) | ||
| 61 | } | ||
| 62 | } | ||
| 63 | } | ||
| 64 | |||
| 65 | println("[[Export starten>>||queryString='confirm=1']]") | ||
| 66 | {{/groovy}} |