使用REST中的URI参数过滤输出节点

时间:2014-01-09 18:25:58

标签: xslt-1.0 xslt-2.0 ibm-datapower

我在这里遇到一个大问题,就是在datapower中使用XSLT在范围/特定节点中显示节点。 该服务是一项REST服务。需要从服务URI获取范围/节点号。 其中一个URI如下: -

的http:// {{{服务器名{1}}}}:7120 / pateint /相遇/ labslist /所有patientId = mpUp6R2Z&安培; sourceSystemId = MT_COCAA

在这里,如果我们将参数“all”更改为某个数字说“10”,那么期望响应应该包含 只有Encounter的第10个节点。这意味着响应应根据URI中发送的参数对其进行过滤。

数据如下: -

enter code here

1)如果我们在U​​RI“http:// {{servername}}中给出”5“而不是”all“:7120 / pateint / encounter / labslist / 5?patientId = mpUp6R2Z& sourceSystemId = MT_COCAA”那么我们应该获得

<Encounters>
<Encounter> <Encounter>     -----1st occurance 
<Encounter> <Encounter>     -----2nd occurance 
<Encounter> <Encounter>     -----3rd occurance 
<Encounter> <Encounter>     -----4th occurance 
<Encounter> <Encounter>     -----5th occurance 
<Encounter> <Encounter>     -----6th occurance 
<Encounters>

2)如果我们在U​​RI“http:// {{servername}}中给出”2到5“而不是”all“的范围:7120 / pateint / encounter / labslist / 2-5?patientId = mpUp6R2Z&amp; sourceSystemId = MT_COCAA“那我们应该得到

<Encounters>
<Encounter>   <Encounter>       ----- 5th occurance
<Encounters>

3)如果范围/数量超出响应中存在的节点总数,在当前示例中说“10”,超过最大节点数6或范围“2-7”再次超过6,那么应该通过一些HTTP错误。

这可以实现吗?我们可以为上面制作一个通用的XSLT,以便它适用于任何列表,不仅仅是遇到,无论是药物还是其他任何东西。它从服务传入URI获取范围/特定节点号,然后根据它过滤掉输出。

谢谢和问候, 罗汉

1 个答案:

答案 0 :(得分:2)

首先你需要从URI中提取数字,可能有更好的方法来做,但这是一个建议:

<xsl:variable name="URI" select="dp:variable('var://service/URI')"/>
<xsl:variable name="tmp" select="substring-after($URI,'labslist/')"/>
<xsl:variable name="elempos" select="substring-before($tmp,'?')"/>

如果结果中有破折号,则需要将其拆分为两个数字,使用“substring-after”和“substring-before again”。

现在你将得到两个变量,例如: “elempos-start”和“elempos-end”。在XPath中使用这些元素来获取元素:

[position() >= elempos-start and not(position() > elempos-end)]

希望这会有所帮助......