[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XSL/XPath to generate a list of ancestors?
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>
|
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
|