[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: indenting maps on write
In my experience, this is hard to get right. It shows that XML attributes weren't really conceived with the idea to write code in them. Some ideas: - Modify the XML parser to not do attribute normalisation (if possible in your environment) - Maybe try parsing the map using xsl:evaluate and reconstruct it? Although then you will probably encounter other issues, e.g. I believe key order is non-deterministic. - Use <xsl:map> - Explain your colleagues how it works and tell them to live with it. Willem On 3 Apr 2024, 07:29, at 07:29, "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: >If you want to force a newline in the serialisation you need to special >case the newline from the standard xml normalisation, I use @ here but >any >character guaranteed not to be in the input would work > ><?xml version="1.0" encoding="UTF-8"?> ><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:math="http://www.w3.org/2005/xpath-functions/math" > xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" > exclude-result-prefixes="xs math xd" > version="3.0"> > <xsl:output use-character-maps="nl"/> > <xsl:character-map name="nl"> > <xsl:output-character character="@" string=" "/> > </xsl:character-map> > <xd:doc scope="stylesheet"> > <xd:desc> > <xd:p><xd:b>Created on:</xd:b> Apr 2, 2024</xd:p> > <xd:p><xd:b>Author:</xd:b> graydon</xd:p> > <xd:p></xd:p> > </xd:desc> > </xd:doc> > <xsl:mode on-no-match="shallow-copy"/> > <xd:doc> > <xd:desc>increment the instance number</xd:desc> > </xd:doc> ><xsl:template match="xsl:variable[@name eq >'punctuationNameMap']/@select"> > <xsl:attribute name="select" select="replace(.,' {7}','@ ')"/> > </xsl:template> ></xsl:stylesheet> > > > >On Wed, 3 Apr 2024 at 01:16, David Carlisle d.p.carlisle@xxxxxxxxx < >xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > >> >> >> On Wed, 3 Apr 2024 at 00:28, Graydon graydon@xxxxxxxxx < >> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> >>> On Tue, Apr 02, 2024 at 09:19:29PM -0000, Michael Kay >>> michaelkay90@xxxxxxxxx scripsit: >>> > Well, `file:write` isn't going to add any whitespace, it will be >some >>> process prior to that (which you haven't shown us). >>> >>> If I boil the whole thing down to a simple example, if I start with: >>> >>> >> so you are adding the space, not the xslt system. >> >> In an xml attribute the xml parser will normalise newlines to a space >so >> you are adding 9 spaces before each key of the map from a newline >and 8 >> spaces. >> You could replace . in replace(.,'''','') by normalize-space(.) or >> replace(.,' ','') depending how aggressively you want to remove >space. >> >> David >> >> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >> EasyUnsubscribe ><http://lists.mulberrytech.com/unsub/xsl-list/2739265> (by >> email <>)
|
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
|