[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Expensive XSLT2 - suggestions for improving?
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! Thanks, - Michael
|
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
|