我在这里遇到一个大问题,就是在datapower中使用XSLT在范围/特定节点中显示节点。 该服务是一项REST服务。需要从服务URI获取范围/节点号。 其中一个URI如下: -
的http:// {{{服务器名{1}}}}:7120 / pateint /相遇/ labslist /所有patientId = mpUp6R2Z&安培; sourceSystemId = MT_COCAA
在这里,如果我们将参数“all”更改为某个数字说“10”,那么期望响应应该包含 只有Encounter的第10个节点。这意味着响应应根据URI中发送的参数对其进行过滤。
数据如下: -
enter code here
1)如果我们在URI“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)如果我们在URI“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获取范围/特定节点号,然后根据它过滤掉输出。
谢谢和问候, 罗汉
答案 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)]
希望这会有所帮助......