2017-01-23 64 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