我已经实现了以下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>
请告知我们我们的实现是否存在任何问题。
提前谢谢
答案 0 :(得分:0)
函数中没有上下文节点或上下文项,因此,如果要访问某个文档中的节点,则需要为该文档或节点定义一个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
....
,然后使用正确的文档调用该函数,例如<xsl:value-of select="conn:getConnection('foo', 't1', 's2', /)"/>