【问题标题】:XPaths are not working in XSLT global functionsXPath 在 XSLT 全局函数中不起作用
【发布时间】:2018-06-28 05:43:33
【问题描述】:

我已经实现了下面的 xslt 全局函数,但是它不允许使用 XPath 表达式。

例如://Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacent_Track_ID !='' 正在引发异常。

            <xsl:function name="conn:getConnetion" as="xs:string">
                   <xsl:param name="TYPE" as="xs:string"/>
                   <xsl:param name="TrackID" as="xs:string"/>
                   <xsl:param name="SwitchID" as="xs:string"/>    
                   <xsl:choose>
                        <xsl:when test="($TYPE = 'TrackBegin')">
                            <xsl:if test="((//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacent_Track_ID !='') and (//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacent_Track_ID !='0'))"> 
                              <xsl:sequence select="concat(concat((TrackID * 10000) , '#'), (concat((//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacent_Track_ID * 10000), 1)))"/>
                            </xsl:if>               
                        </xsl:when>
                        <xsl:when test="($TYPE = 'TrackEnd')">            
                            <xsl:if test="((//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/End_Adjacent_Track_ID !='') and (//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/End_Adjacent_Track_ID !='0'))"> 
                              <xsl:sequence select="concat(concat(concat((TrackID * 10000) , 1) , '#'), (//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/End_Adjacent_Track_ID * 10000))"/>
                            </xsl:if>
                        </xsl:when>
                        <!-- <xsl:otherwise></xsl:otherwise> -->
                   </xsl:choose>
             </xsl:function>

如果我们的实施有任何问题,请告诉我们。

提前谢谢你

【问题讨论】:

    标签: xslt-2.0


    【解决方案1】:

    函数中没有上下文节点或上下文项,因此,如果您想从某个文档访问节点,则需要为该文档或节点定义一个xsl:param,并将其传递给函数调用例如

            <xsl:function name="conn:getConnetion" as="xs:string">
                   <xsl:param name="TYPE" as="xs:string"/>
                   <xsl:param name="TrackID" as="xs:string"/>
                   <xsl:param name="SwitchID" as="xs:string"/> 
                   <xsl:param name="track-doc" as="document-node()"/>   
                   <xsl:choose>
                        <xsl:when test="($TYPE = 'TrackBegin')">
                            <xsl:if test="(($track-doc//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacent_Track_ID !='') and ($track-doc//Track_Chainings/Track_Chaining[Track_ID=$TrackID]/Begin_Adjacen
              ....
    

    然后使用正确的文档调用函数,例如&lt;xsl:value-of select="conn:getConnection('foo', 't1', 's2', /)"/&gt;

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多