Subject: Re: [xsl] How to incrementally add to a result document? From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 29 Jun 2024 09:49:14 -0000 |
On 29/06/2024 00:39, Dimitre Novatchev dnovatchev@xxxxxxxxx wrote: > I would represent the log as a global map variable and place any > action there as an entry likeB {action-key, action-info}, immediately > on completing each action. Is that possible to have such a map as a global variable and update it step by step, other than using an accumulator? If you set up a global <xsl:variable name="log-map" select="map{}"/> and then in any template use that map, you can't really update the global variable as all map update operations like https://www.w3.org/TR/xpath-functions-31/#func-map-put return a new map. > > Finally, when the processing is finished, we can produce fromB the > log-mapB a single result-document that contains all entries of the > log-map. > > Thanks, > Dimitre > > On Fri, Jun 28, 2024 at 2:38b/PM Roger L Costello costello@xxxxxxxxx > <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi Folks, > > I have an XSLT program that converts an old form to a new form. My > XSLT program has a template rule that converts this old form: > > <Airport_Name>Boston Logan Airport</Airport_Name> > > to this new form: > > <name>Boston Logan Airport</name> > > My XSLT program has a template rule that converts this old form: > > <Airport_Elevation>19</Airport_Elevation> > > to this new form: > > <elevation>19</elevation> > > I want the template rules to also output -- to another, different > file -- metadata that shows what actions were taken. Here is the > template rule for Airport_Name: > ----------------------------------------------------------- > <xsl:template match="Airport_Name"> > B B <name> > B B B B <xsl:value-of select="normalize-space(.)"/> > B B </name> > B B <!-- output metadata showing the actions taken --> > B B <xsl:result-document href="metadata.xml" format="XML-format"> > B B B B <mapping> > B B B B B B <legacy-elmt-name> > B B B B B B B B <xsl:value-of select="name()"/> > B B B B B B </legacy-elmt-name> > B B B B B B <legacy-elmt-value> > B B B B B B B B <xsl:value-of select="."/> > B B B B B B </legacy-elmt-value> > B B B B B B <new-elmt-name> > B B B B B B B B <xsl:text>name</xsl:text> > B B B B B B </new-elmt-name> > B B B B B B <new-elmt-value> > B B B B B B B B <xsl:value-of select="normalize-space(.)"/> > B B B B B B </new-elmt-value> > B B B B </mapping> > B B </xsl:result-document> > </xsl:template> > ----------------------------------------------------------- > Here is the template rule for Airport_Elevation: > ----------------------------------------------------------- > <xsl:template match="Airport_Elevation"> > B B <elevation> > B B B B <xsl:if test=". castable as xs:integer"> > B B B B B B <xsl:value-of select="xs:integer(.)"/> > B B B B </xsl:if> > B B </elevation> > B B <!-- output metadata showing the actions taken --> > B B <xsl:result-document href="metadata.xml" format="XML-format"> > B B B B <mapping> > B B B B B B <legacy-elmt-name> > B B B B B B B B <xsl:value-of select="name()"/> > B B B B B B </legacy-elmt-name> > B B B B B B <legacy-elmt-value> > B B B B B B B B <xsl:value-of select="."/> > B B B B B B </legacy-elmt-value> > B B B B B B <new-elmt-name> > B B B B B B B B <xsl:text>elevation</xsl:text> > B B B B B B </new-elmt-name> > B B B B B B <new-elmt-value> > B B B B B B B B <xsl:if test=". castable as xs:integer"> > B B B B B B B B B B <xsl:value-of select="xs:integer(.)"/> > B B B B B B B B </xsl:if> > B B B B B B </new-elmt-value> > B B B B </mapping> > B B </xsl:result-document> > </xsl:template> > ----------------------------------------------------------- > Here is how the template rules are activated: > > <airport> > B B B B <xsl:apply-templates select="Airport_Name"/> > B B B B <xsl:apply-templates select="Airport_Elevation"/> > </airport> > > When I run my XSLT program I get this error message: > > Error in xsl:result-document/@href > XTDE1490B Cannot write more than one result document to the same URI > > The error message is telling me that I cannot write to the > metadata.xml file in an incremental fashion, right? > > What to do? > > Is there anyway that I can achieve what I desire -- output to one > document the result of mapping the old form to the new form and > output to another document metadata that describes the mapping > steps that were taken? Or is this outside the realm of XSLT's > capabilities? > > /Roger > > > > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/582271> > (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to incrementally add , Dimitre Novatchev dn | Thread | Re: [xsl] How to incrementally add , Michael Kay michaelk |
Re: [xsl] How to incrementally add , Martin Honnen martin | Date | Re: [xsl] How to incrementally add , Michael Kay michaelk |
Month |