Typically i am doing an XSLT process over a Weblogic12 server. I kept running into this issue
net.sf.saxon.trans.DynamicError: An attribute node
(id) cannot be created after the children of the containing element
Before the migration, our team had no problems at all...
Any idea why? i recently upgraded from BEA Weblogic3 to Oracle Enterprise Weblogic 12. Or am i missing a library?
This is plaguing our entire team! Thanks!
EDIT 1:
Error points to <xsl:attribute name="id">
in <xsl:template name="makeErrorDiv">
<td>
<xsl:copy-of select="@colspan | @align | @style | @valign | @class | @id | @name"/>
<xsl:if test="@colspan = '1' and $columnWidth != '' and not(@suppressColWidth='true')"><xsl:attribute name="width"><xsl:value-of select="$columnWidth"/></xsl:attribute></xsl:if>
<xsl:if test="@rowspan != '1'"><xsl:copy-of select="@rowspan"/></xsl:if>
<xsl:if test="descendant::ErrMsg">
<xsl:call-template name="makeErrorDiv"/>
</xsl:if>
</td>
<xsl:template name="makeErrorDiv">
<div style="display:none;">
<xsl:choose>
<xsl:when test="descendant::*[ParentId]">
<xsl:attribute name="id"><xsl:value-of select="descendant::ParentId[position() = 1]"/><![CDATA[$err]]></xsl:attribute>
</xsl:when>
<xsl:when test="descendant::*[ErrMsg][Name]">
<xsl:attribute name="id"><xsl:value-of select="descendant::*[ErrMsg][position() = 1]/Name"/><![CDATA[$err]]></xsl:attribute>
</xsl:when>
<xsl:when test="not(descendant::*[ErrMsg])">
<xsl:variable name="name"><xsl:value-of select="descendant::*[Name][position() = 1]/Name"/></xsl:variable>
<xsl:variable name="parsed"><xsl:value-of select="substring-before($name, '!')"/></xsl:variable>
<xsl:attribute name="id"><!--error here! -->
<xsl:choose>
<xsl:when test="$parsed = ''"><xsl:value-of select="$name"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$parsed"/></xsl:otherwise>
</xsl:choose>
<xsl:text><![CDATA[$err]]></xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test="descendant::*[ErrMsg][not(Name)]">
<xsl:variable name="name"><xsl:value-of select="descendant::*[Name][position() = 1]/Name"/></xsl:variable>
<xsl:variable name="parsed"><xsl:value-of select="substring-before($name, '!')"/></xsl:variable>
<xsl:attribute name="id">
<xsl:choose>
<xsl:when test="$parsed = ''"><xsl:value-of select="$name"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$parsed"/></xsl:otherwise>
</xsl:choose>
<xsl:text><![CDATA[$err]]></xsl:text></xsl:attribute>
</xsl:when>
</xsl:choose>
<span style="color: #FF0000; font-family: Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; text-decoration: none;"><xsl:value-of select="descendant::ErrMsg[position() = 1]"/></span>
</div>
</xsl:template>
XML sample...not sure if it's helpful...the entire XML file is 1000+ lines
<DisclosureRowColor template="OneColumn" position="8" lastPosition="30" colCount="4" color1="#F2F8FE" color2="#ffffff">
<Cell colspan="1">
<ListBox onchange="toggleAddressByAjax();">
<Name>APPLICATION_CUSTOMER.EMPLOYED_SINCE_MM!YLI</Name>
<Size>1</Size>
<Default rtexprvalue="true">mb.getValue("APPLICATION_CUSTOMER.EMPLOYED_SINCE_MM!YLI", "A")</Default>
<Map rtexprvalue="true">mb.getGenericLookup("V_YEAR")</Map>
<ReadOnly rtexprvalue="true">mb.isReadonly(2)</ReadOnly>
</ListBox>
<Label class="sTGBFBS">
<Caption> &nbsp;&nbsp;Jahre </Caption>
</Label>
<ListBox onchange="toggleAddressByAjax();">
<Name>APPLICATION_CUSTOMER.EMPLOYED_SINCE_MM!MLI</Name>
<Size>1</Size>
<Default rtexprvalue="true">mb.getValue("APPLICATION_CUSTOMER.EMPLOYED_SINCE_MM!MLI", "A")</Default>
<Map rtexprvalue="true">mb.getGenericLookup("V_MONTH")</Map>
<ReadOnly rtexprvalue="true">mb.isReadonly(2)</ReadOnly>
</ListBox>
<Label class="sTGBGBS">
<Caption> &nbsp;&nbsp;Monate </Caption>
</Label>
<ErrMsg/>
</Cell>
</DisclosureRowColor>
I think your problem might be the
<xsl:text>
nodes inside of your<xsl:attribute>
elementI think that should just say
since you're creating an attribute, not a text node.
Update: I tried to reproduce the error, but couldn't. BUT, I did find that saxon was using whitespace in the attribute. You might want to try Getting rid of some of the whitespace between some of the XSL elements.
And this might solve your the actual error you're seeing:
I think some text must be getting added to your 'div' element before the id attribute can be added.