Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Reverse Order | ||||||||
Line: 17 to 17 | ||||||||
Long answer: http://www.dpawson.co.uk/xsl/sect2/nbsp.html
Passthrough | ||||||||
Changed: | ||||||||
< < | This transform (which I learned from the guys that wrote the Maverick MVC framework) passes everything through unmolested. | |||||||
> > | This transform (which I learned from the guys that wrote the most excellent Maverick MVC framework) passes everything through unmolested. | |||||||
<xsl:template match="@*|node()"> | ||||||||
Line: 31 to 31 | ||||||||
http://www.jenitennison.com/xslt/ - lots of good XSLT tips http://www.jenitennison.com/xslt/grouping/index.xml - how to group items in XSLT (can be used to emulate sql's "select distinct" functionality) | ||||||||
Added: | ||||||||
> > |
Translets vs. TemplatesI wanted to see if pre-compiled translets were any faster thanTemplates so I found some code to compile and run them, and did some micro-benchmarks. Bottom line: translets didn't transform XML faster than Templates, maybe even a little slower. The big win was in initialization but I don't really care about that. Given that translets require Xalan and Templates are built in to Sun's Java I think I'll stick with Templates. While I was at it I tried Java .15 and 1.6 and Saxon 8. I was surprised that Saxon didn't kick the shit out of Xalan - it sure did back in 2003, but now they're in the same ballpark.
using Xalan's "birds" example files, running 5000 times: first: Templates t = tf.newTemplates(new StreamSource(URI)); second: Transformer transformer = t.newTransformer(); third: transformer = tf.newTransformer(new StreamSource(URI)); fourth: transformer.transform(document, result); using XSL as input, generating Templates: before newTemplates: 1189707648447 after newTemplates: 1189707667564 before newTransformer: 1189707667564 after newTransformer: 1189707667665 before newTransformer: 1189707667665 after newTransformer: 1189707689644 before transform: 1189707689645 after transform: 1189707693274 before newTemplates: 1189707738107 after newTemplates: 1189707757511 before newTransformer: 1189707757511 after newTransformer: 1189707757623 before newTransformer: 1189707757624 after newTransformer: 1189707779782 before transform: 1189707779783 after transform: 1189707783361 before newTemplates: 1189707955318 after newTemplates: 1189707974624 before newTransformer: 1189707974624 after newTransformer: 1189707974747 before newTransformer: 1189707974747 after newTransformer: 1189707996928 before transform: 1189707996929 after transform: 1189708000522 using pre-compiled translets: before newTemplates: 1189707581547 after newTemplates: 1189707581633 before newTransformer: 1189707581634 after newTransformer: 1189707581770 before newTransformer: 1189707581770 after newTransformer: 1189707581905 before transform: 1189707581906 after transform: 1189707585838 before newTemplates: 1189707596774 after newTemplates: 1189707596867 before newTransformer: 1189707596867 after newTransformer: 1189707597004 before newTransformer: 1189707597004 after newTransformer: 1189707597131 before transform: 1189707597132 after transform: 1189707601164 before newTemplates: 1189707611967 after newTemplates: 1189707612056 before newTransformer: 1189707612056 after newTransformer: 1189707612193 before newTransformer: 1189707612193 after newTransformer: 1189707612330 before transform: 1189707612331 after transform: 1189707616274 using Java 1.5 Templates: before newTemplates: 1189709259413 after newTemplates: 1189709266558 before newTransformer: 1189709266559 after newTransformer: 1189709267926 before newTransformer: 1189709267926 after newTransformer: 1189709274038 before transform: 1189709274039 after transform: 1189709280763 before newTemplates: 1189709331211 after newTemplates: 1189709338562 before newTransformer: 1189709338562 after newTransformer: 1189709339942 before newTransformer: 1189709339942 after newTransformer: 1189709346095 before transform: 1189709346096 after transform: 1189709352755 before newTemplates: 1189709372059 after newTemplates: 1189709379414 before newTransformer: 1189709379414 after newTransformer: 1189709380865 before newTransformer: 1189709380865 after newTransformer: 1189709386942 before transform: 1189709386942 after transform: 1189709393634 using Java 1.6 Templates: before newTemplates: 1189709444012 after newTemplates: 1189709450754 before newTransformer: 1189709450754 after newTransformer: 1189709452169 before newTransformer: 1189709452170 after newTransformer: 1189709457757 before transform: 1189709457758 after transform: 1189709464277 before newTemplates: 1189709482416 after newTemplates: 1189709489179 before newTransformer: 1189709489179 after newTransformer: 1189709490581 before newTransformer: 1189709490581 after newTransformer: 1189709496125 before transform: 1189709496125 after transform: 1189709502463 before newTemplates: 1189709517385 after newTemplates: 1189709524028 before newTransformer: 1189709524028 after newTransformer: 1189709525440 before newTransformer: 1189709525440 after newTransformer: 1189709531095 before transform: 1189709531095 after transform: 1189709537325 using saxonb8-j9: before newTemplates: 1189710098766 after newTemplates: 1189710103040 before newTransformer: 1189710103040 after newTransformer: 1189710103055 before newTransformer: 1189710103055 after newTransformer: 1189710105376 before transform: 1189710105376 after transform: 1189710111238 before newTemplates: 1189710194556 after newTemplates: 1189710198665 before newTransformer: 1189710198665 after newTransformer: 1189710198677 before newTransformer: 1189710198677 after newTransformer: 1189710201122 before transform: 1189710201122 after transform: 1189710206944 before newTemplates: 1189710247241 after newTemplates: 1189710251380 before newTransformer: 1189710251380 after newTransformer: 1189710251393 before newTransformer: 1189710251393 after newTransformer: 1189710253711 before transform: 1189710253712 after transform: 1189710259665 |