【发布时间】:2012-08-30 15:12:53
【问题描述】:
通常我在 Weblogic12 服务器上执行 XSLT 进程。我一直遇到这个问题
net.sf.saxon.trans.DynamicError: An attribute node
(id) cannot be created after the children of the containing element
在迁移之前,我们的团队完全没有问题...
知道为什么吗?我最近从 BEA Weblogic3 升级到 Oracle Enterprise Weblogic 12。还是我缺少库?
这困扰着我们整个团队!谢谢!
编辑 1:
<xsl:template name="makeErrorDiv"> 中的错误指向<xsl:attribute name="id">
<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 示例...不确定是否有用...整个 XML 文件有 1000 多行
<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>
【问题讨论】:
-
XSLT 有问题。 (最有可能放置一个
xsl:attribute。)你能发布XSLT 吗? -
同上 DevNull 所说的。您可能在发出文本或元素后尝试使用
xsl:attribute发出节点。您以前可能使用过不同的 XSLT 处理器,它不会抱怨这些事情。发布您的 XSLT,我们将帮助您发现问题。它应该是可以修复的。 -
大家好,我刚刚添加了源代码...
-
而不是
<xsl:variable name="..."><xsl:value-of select="..."/></xsl:variable>,您可以试试<xsl:variable name="..." select="..." />看看是否会改善问题? -
@IanRoberts 你的意思是为此代码 sn-p 或仅针对违规范围?
标签: html xslt weblogic weblogic12c