[Home] [By Thread] [By Date] [Recent Entries]
On May 12, 2008, at 9:13 AM, Michael Kay wrote:
I tried this: <xsl:template match="*" name="fullNameWorker" mode="fullName">
<xsl:if test="generate-id(.)!=generate-id(/)">
<xsl:apply-templates select=".." mode="fullName"/>
<xsl:if test="generate-id(..)!=generate-id(/)">.</xsl:if>
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:template>And it just nuked the stack when I tried to apply the transform: Exception in thread "main" java.lang.StackOverflowError at org.jdom.Verifier.checkXMLName(Verifier.java:604) at org.jdom.Verifier.checkAttributeName(Verifier.java:116) at org.jdom.Attribute.setName(Attribute.java:360) at org.jdom.Attribute.<init>(Attribute.java:228) at org.jdom.Attribute.<init>(Attribute.java:276) at org.jdom.DefaultJDOMFactory.attribute(DefaultJDOMFactory.java:93) at org.jdom.input.SAXHandler.startElement(SAXHandler.java:544) at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java: 527) at org.jdom.transform.JDOMResult$DocumentBuilder.startElement (JDOMResult.java:519) at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag (ToXMLSAXHandler.java:205) at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters (ToXMLSAXHandler.java:524) at GregorSamsa.constraintTagWorker() at GregorSamsa.applyTemplates4() at GregorSamsa.applyTemplates4() (Which leads me to ask: Why is there a Kafka character lurking in my XSLT implementation?) Some how the recursion gets out of control. Some more context for the XSL: The goal was that when processing an element I need to generate it's linage in a "." separated string. So I need to insert a tag containing this lineage string into the element that is being processed/ <xsl:template name="fullName">
<fullName>
<xsl:call-template name="fullNameWorker" />
</fullName >
</xsl:template> <xsl:template match="*" name="fullNameWorker" mode="fullName">
<xsl:if test=".!=/">
<xsl:apply-templates select=".." mode="fullName"/>
<xsl:if test="..!=/">.</xsl:if>
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:template> <xsl:template match="*">
<myNewNode>
<xsl:call-template name="fullName">
</myNewNode>
</xsl:template>
|

Cart



