2011-05-14 60 views
0

我已經鏈狀XSLT 2.0轉化方案(使用撒克遜),像這樣:
- I1.xml爲T1.xslt輸入,樣式表,其將建立T2.xslt
- I2。 xml輸入爲T2.xslt,將輸出O1.xml的樣式表
動態層樓高XPath查詢串

我想要一個xsl:函數(這樣它將在XPath表達式中可用),我們稱之爲my:f(dataNode, queryString),它將使用提供的查詢來查詢dataNode,類似如下:

<xsl:function name="my:f"> 
     <xsl:param name="dataNode" as="item()*"/> 
     <xsl:param name="query" as="xsd:string"/> 
      <xsl:sequence select="$dataNode/$query"/> 
</xsl:function> 

my:f()存儲在一個單獨的文件中,僅包含在T2中。
my:f()被隔離在一個文件中,因爲根據配置,它可能會調用一個擴展函數來執行查詢。
my:f()調用當然是T1中的「構建」(其中XPath queryString是動態連接的),但實際上僅在T2中調用它。

我似乎有唯一的問題..是如何實際將動態構建queryString從T1傳遞到T2,然後作爲一個簡單的字符串傳遞給my:f()(因爲實際查詢將由我執行: F())。

有沒有人有任何想法(最好是一些代碼)關於如何解決這個問題?

問候

回答

1

那麼,如果你想構建和評估在運行時XPath表達式,那麼你需要使用擴展功能像http://www.saxonica.com/documentation/extensions/functions/evaluate.xml<xsl:sequence select="saxon:evaluate(concat('$p1/', $query), $dataNode)"/>

+2

或者你可以把它寫成的

+0

請注意,這裏假定$ query是一個XPath表達式 - 它不適用於XQuery –

+0

感謝您的反饋,先生!還有一件事;評估()可以在Saxon 9.3 HE中或僅在PE/EE中使用? – user414366