Wiki source code of Export To Markdown

Version 6.1 by Tobias Wintrich on 2026/03/27 13:30

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 // Dateipfad erzeugen
37 def relativePath = pathSerializer.serialize(doc.documentReference)
38 def outputFile = new File(exportDir, relativePath + ".md")
39
40 outputFile.parentFile.mkdirs()
41 outputFile.write(markdown, "UTF-8")
42
43 println(" -> Saved page to " + outputFile)
44
45 // Anhänge exportieren
46 for (attachment in doc.getAttachmentList()) {
47
48 def attachmentFile = new File(outputFile.parentFile, attachment.getFilename())
49
50 attachmentFile.withOutputStream { os ->
51 os << attachment.getContentInputStream()
52 }
53
54 println(" -> Exported attachment " + attachment.getFilename())
55 }
56 }
57 }
58
59 println("[[Export starten>>||queryString='confirm=1']]")
60 {{/groovy}}