Wiki source code of Export To Markdown

Last modified by Tobias Wintrich on 2026/03/27 13:39

Show last authors
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 '![\$2](\$1)'
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}}