2

我在这里面临一个大问题,即在 datapower 中使用 XSLT 显示范围/特定节点中的节点。该服务是 REST 服务。范围/节点号需要从服务 URI 中获取。URI 之一如下所示:-

http://{{servername enter code here}}:7120/pateint/encounter/labslist/all?patientId=mpUp6R2Z&sourceSystemId=MT_COCAA

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

数据如下:-

<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>

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

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

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

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

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

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

谢谢和问候, 罗汉

4

1 回答 1

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)]

希望这可以帮助...

于 2014-02-27T15:10:18.707 回答