|
Subject: Re: [xsl] pretty-printing XML From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Wed, 26 Mar 2003 22:26:10 +0000 |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] pretty-printing XML, Mike Brown | Thread | RE: [xsl] pretty-printing XML, David . Pawson |
| Re: [xsl] XML to XML, Rick Taylor | Date | Re: [xsl] example of really good XS, S Woodside |
| Month |