|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: pretty-printing XML
Mike Brown wrote:
>>> In particular, my XML has lots of very long comment lines, which I
>>> would like to be wrapped to a sensible line length, and indented
>>> with a hanging indent like this:
>>>
>>> <!-- blah blah
>>> blah blah
>>> blah blah -->
[snip]
> Nevertheless, it is possible to devise a word-wrapping algorithm in
> pure XSLT, with hanging indents, even. It would be very slow and
> about 200 lines long, though. We used to use something like this to
> generate documentation, but I recently switched us to using an
> extension function that uses a Python 1-liner to do most of the
> work.
For what it's worth, XSLT 2.0 makes this a whole lot easier with its
regular expression support. For example, you could use:
<xsl:template match="comment()">
<xsl:text><!-- </xsl:text>
<xsl:analyze-string select="normalize-space(.)"
regex=".{{1,69}}(\s|$)">
<xsl:matching-substring>
<xsl:if test="position() != 1"><xsl:text> </xsl:text></xsl:if>
<xsl:value-of select="." />
<xsl:text>
</xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
<xsl:text> --></xsl:text>
</xsl:template>
[Note the doubling of the {}s in the regex attribute because it's an
attribute value template; that's caught me out twice today!]
You could use something more subtle than normalize-space() to preserve
*some* of the spacing within the comment but not others.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
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
|

Cart








