github.com/matislovas/ratago@v0.0.0-20240408115641-cc0857415a7a/ratago.go (about) 1 // The ratago command-line utility runs an input file through an XSLT stylesheet. 2 package main 3 4 import ( 5 "flag" 6 "fmt" 7 "os" 8 9 "github.com/matislovas/gokogiri/xml" 10 "github.com/matislovas/ratago/xslt" 11 ) 12 13 func usage() { 14 fmt.Fprintf(os.Stderr, "Usage: %s [options] STYLESHEET INPUT\n", os.Args[0]) 15 flag.PrintDefaults() 16 } 17 18 var indent = flag.Bool("indent", false, "Attempt to indent any XML output") 19 20 func main() { 21 flag.Usage = usage 22 flag.Parse() 23 if flag.NArg() < 2 { 24 usage() 25 return 26 } 27 //set some prefs based on flags 28 xslfile := flag.Arg(0) 29 inxml := flag.Arg(1) 30 31 style, err := xml.ReadFile(xslfile, xml.StrictParseOption) 32 if err != nil { 33 fmt.Println(err) 34 return 35 } 36 37 doc, err := xml.ReadFile(inxml, xml.StrictParseOption) 38 if err != nil { 39 fmt.Println(err) 40 return 41 } 42 43 //TODO: register some extensions (EXSLT, testing, debug) 44 //TODO: process XInclude if enabled 45 stylesheet, err := xslt.ParseStylesheet(style, xslfile) 46 if err != nil { 47 fmt.Println(err) 48 return 49 } 50 51 options := xslt.StylesheetOptions{*indent, nil} 52 53 output, err := stylesheet.Process(doc, options) 54 if err != nil { 55 fmt.Println(err) 56 return 57 } 58 59 fmt.Println(output) 60 }