[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XML pretty printing in HTML
| Okay, I know you said you don't want to have to do a bunch of XSL coding, | but you <em>might</em> want to look at the default XSL file used by | Microsoft to display XML documents in the IE5 browser. It takes any XML | file and displays it in the browser as a collapsible tree, complete with | some colour coding. I'm betting that you could modify it to get the exact | styling you're looking for. You can download it at | http://msdn.microsoft.com/xml/samples/defaultss/defaultss.xsl Here's a version of the above stylesheet (credits go to Jonathan Marsh at Microsoft for writing the original!) which runs cleanly in XT. A quick hack job to get it to run, but should get the thought process started... If you save out the file below as "xsl.xsl", then % xt xsl.xsl xsl.xsl xsl.html will use "xsl.xsl" to format itself. Have fun. <?xml version="1.0"?> <!-- | | XSLT April 1999 WD Compliant Version of IE5 Default Stylesheet | | Original version by Jonathan Marsh (jmarsh@xxxxxxxxxxxxx) | http://msdn.microsoft.com/xml/samples/defaultss/defaultss.xsl | +--> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"> <xsl:template match="/"> <HTML> <HEAD> <STYLE> BODY {font:x-small 'Verdana'; margin-right:1.5em} <!-- container for expanding/collapsing content --> .c {cursor:hand} <!-- button - contains +/-/nbsp --> .b {color:red; font-family:'Courier New'; font-weight:bold; text-decoration:none} <!-- element container --> .e {margin-left:1em; text-indent:-1em; margin-right:1em} <!-- comment or cdata --> .k {margin-left:1em; text-indent:-1em; margin-right:1em} <!-- tag --> .t {color:#990000} <!-- tag in xsl namespace --> .xt {color:#990099} <!-- attribute in xml or xmlns namespace --> .ns {color:red} <!-- attribute in dt namespace --> .dt {color:green} <!-- markup characters --> .m {color:blue} <!-- text node --> .tx {font-weight:bold} <!-- multi-line (block) cdata --> .db {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; padding-left:.3em; border-left:1px solid #CCCCCC; font:small Courier} <!-- single-line (inline) cdata --> .di {font:small Courier} <!-- DOCTYPE declaration --> .d {color:blue} <!-- pi --> .pi {color:blue} <!-- multi-line (block) comment --> .cb {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; padding-left:.3em; font:small Courier; color:#888888} <!-- single-line (inline) comment --> .ci {font:small Courier; color:#888888} PRE {margin:0px; display:inline} </STYLE> </HEAD> <BODY class="st"><xsl:apply-templates/></BODY> </HTML> </xsl:template> <!-- Template for pis not handled elsewhere --> <xsl:template match="pi()"> <DIV class="e"> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"><?</SPAN><SPAN class="pi"><xsl:value-of select="qname(.)"/> <xsl:value-of select="."/></SPAN><SPAN class="m">?></SPAN> </DIV> </xsl:template> <!-- Template for the XML declaration. Need a separate template because the pseudo-attributes are actually exposed as attributes instead of just element content, as in other pis --> <xsl:template match="pi('xml')"> <DIV class="e"> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"><?</SPAN><SPAN class="pi">xml <xsl:for-each select="@*"><xsl:value-of select="qname(.)"/>="<xsl:value-of select="."/>" </xsl:for-each></SPAN><SPAN class="m">?></SPAN> </DIV> </xsl:template> <!-- Template for attributes not handled elsewhere --> <xsl:template match="@*" xml:space="preserve"><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*/@*">x</xsl:if>t</xsl:attribute> <xsl:value-of select="qname(.)"/></SPAN><SPAN class="m">="</SPAN><B><xsl:value-of select="."/></B><SPAN class="m">"</SPAN></xsl:template> <!-- Template for attributes in the xmlns or xml namespace --> <xsl:template match="@xmlns:*|@xmlns|@xml:*"><SPAN class="ns"> <xsl:value-of select="qname(.)"/></SPAN><SPAN class="m">="</SPAN><B class="ns"><xsl:value-of select="."/></B><SPAN class="m">"</SPAN></xsl:template> <!-- Template for text nodes --> <xsl:template match="text()"> <DIV class="e"> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="tx"><xsl:value-of select="."/></SPAN> </DIV> </xsl:template> <!-- Template for comment nodes --> <xsl:template match="comment()"> <DIV class="k"> <SPAN> <SPAN class="m"><!--</SPAN></SPAN> <SPAN id="clean" class="ci"><PRE><xsl:value-of select="."/></PRE></SPAN> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m">--></SPAN> </DIV> </xsl:template> <!-- Template for cdata nodes <xsl:template match="cdata()"> <DIV class="k"> <SPAN> <SPAN class="m"><![CDATA[</SPAN></SPAN> <SPAN id="clean" class="di"><PRE><xsl:value-of select="."/></PRE></SPAN> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m">]]></SPAN> </DIV> </xsl:template> --> <!-- Template for elements not handled elsewhere (leaf nodes) --> <xsl:template match="*"> <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em"> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"><</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN> <xsl:apply-templates select="@*"/><SPAN class="m"> /></SPAN> </DIV></DIV> </xsl:template> <!-- Template for elements with comment, pi and/or cdata children --> <xsl:template match="*[node()]"> <DIV class="e"> <DIV class="c"> <SPAN class="m"><</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><xsl:apply-templates select="@*"/> <SPAN class="m">></SPAN></DIV> <DIV><xsl:apply-templates/> <DIV><SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"></</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><SPAN class="m">></SPAN></DIV> </DIV></DIV> </xsl:template> <!-- Template for elements with only text children --> <xsl:template match="*[text() and not (comment() or pi())]"> <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em"> <SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"><</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><xsl:apply-templates select="@*"/> <SPAN class="m">></SPAN><SPAN class="tx"><xsl:value-of select="."/></SPAN><SPAN class="m"></</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><SPAN class="m">></SPAN> </DIV></DIV> </xsl:template> <!-- Template for elements with element children --> <xsl:template match="*[*]"> <DIV class="e"> <DIV class="c" STYLE="margin-left:1em;text-indent:-2em"> <SPAN class="m"><</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><xsl:apply-templates select="@*"/> <SPAN class="m">></SPAN></DIV> <DIV><xsl:apply-templates/> <DIV><SPAN class="b"><xsl:text> </xsl:text></SPAN> <SPAN class="m"></</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="qname(.)"/></SPAN><SPAN class="m">></SPAN></DIV> </DIV></DIV> </xsl:template> </xsl:stylesheet> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|