代码之家  ›  专栏  ›  技术社区  ›  Vlad

Marklogic XSLT异常处理

  •  2
  • Vlad  · 技术社区  · 11 年前

    我试图在处理XSLT样式表时处理异常。例外情况是由于数据混乱。我有以下代码:

    <span class="ReceiptCell Date">
            <xdmp:try>
    
                    <xsl:variable name="node" />
                    <xsl:value-of select="_1:Date"/>
                    <xsl:value-of select="if (empty($node)) then '(A)' else  xdmp:strftime('%d %b %Y',//_1:Date)"/>
    
                <xdmp:catch name="e">
    
                    ERROR Rendering Date
                    <xsl:copy-of select="$e"/>
                </xdmp:catch>
    
            </xdmp:try>
        </span>
    

    当此代码在服务器上运行时,我收到以下错误:

    2014-03-26 10:40:09.900 Notice: TaxesTime-Search: XSLT-ELTREQ: (err:XTSE0010) 
    Missing required element child: xdmp:catch required at 
    fn:doc("/lib/transform-abstract-metadata.xsl")/*:stylesheet/*:template[3]/*:span/*:try
    

    这是没有意义的,因为xdmp:catch孩子显然就在那里。然而,这段代码不会导致任何错误,但很明显,它实际上没有做任何事情。

            <span class="ReceiptCell Date">
            <xdmp:try>
    
                <xdmp:catch name="e">
    
                    <xsl:variable name="node" />
                    <xsl:value-of select="_1:Date"/>
                    <xsl:value-of select="if (empty($node)) then '(A)' else  xdmp:strftime('%d %b %Y',//_1:Date)"/>
    
    
                    ERROR Rendering Date
                    <xsl:copy-of select="$e"/>
                </xdmp:catch>
    
            </xdmp:try>
        </span>
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   mholstege    11 年前

    这是解析器中的一个错误。解决方法是在xdmp:ttry之前正好有一个子元素,例如。

    <span class="ReceiptCell Date">
                <xsl:variable name="node" />
                <xsl:value-of select="_1:Date"/>
        <xdmp:try>
                <xsl:value-of select="if (empty($node)) then '(A)' else  xdmp:strftime('%d %b %Y',//_1:Date)"/>
            <xdmp:catch name="e">
    
                ERROR Rendering Date
                <xsl:copy-of select="$e"/>
            </xdmp:catch>
    
        </xdmp:try>
    </span>