Subject: Re: [xsl] Expensive XSLT2 - suggestions for improving? From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 16 Oct 2008 12:34:38 -0400 |
<xsl:template match="value"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:for-each select="key('oid-by-value',.)[1] except ."> <!-- traverse to the @oid of the first element with the same value, unless this is it --> <xsl:attribute name="refoid" select="string()"/> </xsl:for-each> <!-- skip content --> </xsl:copy> </xsl:template>
Cheers, Wendell
Hello experts,
The task is to remove duplicate text content before moving an XML file into translation. After the translation, the former duplicate content should be recreated.
Assume this input XML (I dropped a lot of attributes):
<Doc> <value oid="40068">Lasttrennschalter</value> <value oid="40069">Umbau von N12 auf N4</value> <value oid="4006a">Lasttrennschalter</value> </Doc>
The third <value> should be empty because its content is identical to the first, but we need a pointer to that first element to be able to recreate the content after translation. Also, all original attributes must stay unchanged. Therefore in each duplicate I insert an extra attribute @refoid with the @oid of the source element. So I get this:
<Doc> <value oid="40068">Lasttrennschalter</value> <value oid="40069">Umbau von N12 auf N4</value> <value oid="4006a" refoid="40068"/> </Doc>
My XSL is very simple and works as intended, but it does not scale very good, I guess because I look at preceding::value so many times:
<!-- Condenser: modify all duplicates --> <xsl:template match="value[.=preceding::value]"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:attribute name="refoid" select="preceding::value[.=current()][last()]/@oid"/> <!-- skip content --> </xsl:copy> </xsl:template>
<!-- pass-through all nodes and attributes --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>
I guess a clever constructed key could help a lot... any pointers are very welcome!
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx 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 ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Expensive XSLT2 - suggest, Michael Müller-Hille | Thread | Re: [xsl] Expensive XSLT2 - suggest, Michael Müller-Hille |
Re: [xsl] zero width no-break space, David Carlisle | Date | [xsl] calculating relative position, tom s |
Month |