Munna,
One way of approaching this is to provide your output not only with the
near-copy of your input, but to "annotate" it with elements (probably in a
separate namespace) logging the changes made. Then in a separate pass (or
two of them) you filter the result into two -- one that contains just the
transform results you wanted, another that contains your change log. In
XSLT 2.0, all these traversals can be accomplished in a single run of the
stylesheet.
So:
<xsl:template match="onlyNum">
<xsl:variable name="result">
<onlyNum>
<xsl:analyze-string select="." regex="^(\w+)(\s)*([.])(\s)*$" flags="m">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)" />
</xsl:matching-substring>
</xsl:analyze-string>
</onlyNum>
</xsl:variable>
<xsl:copy-of select="$result"/>
<log:change xmlns:log="yournamespaceURI">
<xsl:copy-of select="."/>
<xsl:text> changed to </xsl:text>
<xsl:copy-of select="$result"/>
</log:change>
</xsl:template>
This approach was first suggested to me by my boss, Tommie Usdin ("XSL-List
Owner" to all y'all). Of course, it can be applied to any transform, not
just near-copies.
Cheers,
Wendell
At 07:13 AM 7/28/2004, you wrote:
Hello all,
I had posted this query yesterday, but realised that the subject of the
message didn't quite clarify my question, hence this repost. Apologies to
those who have already seen this message.
Here's my problem:
I have the following stylesheet which essentially performs an identity
transform on a given xml instance, producing a copy with
only slight changes (the e.g. below has one of these -- stripping out the
concluding punctuation from element 'onlyNum' -- but the actual stylesheet
will have more). I would like to produce another document that records
these changes, at least as a list containing the original and changed
node. this can be either text or xml, something on the lines of:
<onlyNum>E345.</onlyNum> changed to
<onlyNum>E345</onlyNum>
I have a feeling this could be done with xsl:result-document, but am not
sure how to proceed. Any suggestions would be most welcome.
Thanks in advance,
Munna
-----------
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"
omit-xml-declaration="yes"/>
<xsl:template match="/|@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="onlyNum">
<onlyNum>
<xsl:analyze-string select="."
regex="^(\w+)(\s)*([.])(\s)*$" flags="m">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)" />
</xsl:matching-substring>
</xsl:analyze-string>
</onlyNum>
</xsl:template>
</xsl:stylesheet>
======================================================================
Wendell Piez
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================