2017-01-23 47 views
0

使用撒克遜HE/Xpath的2Xpath的:傳遞一個「包羅萬象」參數[開始,用(...)]

到「BusinessType」過濾的業務列表我的XML文件,我通過參數(即「餐廳」或「學校」)的XSL文件:

"java.exe" -jar "saxon9he.jar" -s:FHRS.xml -xsl:FHRS.xsl BusinessType="Restaurant" 

的BusinessType類別名稱都相當長,所以節省打字我傳遞參數給starts-with

<xsl:param name="BusinessType"/> 
<xsl:variable name="ID_New" select="//Details[starts-with(BusinessType,$BusinessType)]/FHRSID"/> 

這是隻是一個林例如。在xsl例程中多次使用相同的格式。

是否可以將'返回所有'通配符參數傳遞給$ BusinessType?我試過*.*。我不太熟悉RegEx。

+0

'starts-with'對於正則表達式根本不起作用。目前還不清楚你想要實現什麼,如果你不設置參數或者你想匹配某個特定的模式,你是否想返回所有'Details'元素。 –

回答

1

starts-with函數https://www.w3.org/TR/xquery-operators/#func-starts-with僅適用於字符串,不適用於正則表達式。然而,作爲第二個參數的空序列或空字符串意味着該函數返回true,因此您可以簡單地定義<xsl:param name="BusinessType" select="()"/>,然後,如果您不想過濾,則不會設置參數,並且謂詞starts-with(BusinessType,$BusinessType)始終爲真。

如果你想使用正則表達式,你需要使用matches函數,例如matches(BusinessType,$BusinessType)如果您將參數設置爲^.*,則匹配任何起始字符的模式將會是。

+0

換句話說,請嘗試'「java.exe」... BusinessType =「」'作爲您的命令行。因爲每個字符串都以''「'開頭。 – LarsH

+0

剛剛嘗試過BusinessType =「」並按我的意願工作。我沒有意識到選擇選項可能是空的。 進一步查看其它一些網站正在使用select =「''」。有什麼區別嗎? – DaveF

相關問題