Re: [xsl] indenting maps on write

Subject: Re: [xsl] indenting maps on write
From: "Graydon graydon@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 2 Apr 2024 23:28:49 -0000
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:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="xs math xd" version="3.0"
  xmlns:math="http://www.w3.org/2005/xpath-functions/math";
  xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"; xmlns:xs="http://www.w3.org/2001/XMLSchema";
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <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:desc>
  </xd:doc>
  <xsl:variable name="punctuationNameMap" select="
      map {
        ',': 'comma',
        ';': 'semicolon',
        ':': 'colon',
        '.': 'period'
      }" static="yes" />
  <xsl:variable as="xs:string" name="instanceNumber" select="'000112'" />
</xsl:stylesheet>

and use this as the source document for

<?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">
  <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 'instanceNumber']/@select">
    <xsl:attribute name="select" select="'''' || ((replace(.,'''','') => number() => xs:integer()) + 1) => format-number('000000') => string() || ''''" />
  </xsl:template>
</xsl:stylesheet>

I get

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:math="http://www.w3.org/2005/xpath-functions/math"; xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; exclude-result-prefixes="xs math xd" version="3.0">
  <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:desc>
  </xd:doc>
  <xsl:variable name="punctuationNameMap" select="       map {         ',': 'comma',         ';': 'semicolon',         ':': 'colon',         '.': 'period'       }" static="yes"/>
  <xsl:variable as="xs:string" name="instanceNumber" select="'000113'"/>
</xsl:stylesheet>


I would like the punctuationNameMap variable to look in the result
document as it does in the source document.

-- Graydon


-- 
Graydon Saunders  | graydonish@xxxxxxxxxxxx
^fs oferiode, pisses swa mfg.
-- Deor  ("That passed, so may this.")

Current Thread