在分段重复的情况下,如何使用Terser.get()方法从特定分段获取值?

时间:2019-05-14 20:13:25

标签: java hl7

我正在尝试阅读我有多个ORC段的HL7消息。 terser.get()方法仅获取第一个ORC段的值。尝试从/ORDER(2)/ORC-X-X读取时,该方法不返回任何值。

Terser mesg = new Terser(next);
System.out.println(mesg.get("/ORDER(2)/ORC-2-1"));

该方法将返回mesg.get("/ORDER/ORC-2-1")的值。我希望它也能返回"/ORDER(2)/ORC-2-1"

Terser完整路径: Terser Full Path

2 个答案:

答案 0 :(得分:1)

解决方案是使用getOrderReps()中的OMS_O05方法,该方法将给出ORDERS的重复次数。还将OMS_O05用作消息类型。

OMS_O05 omsMsg = (OMS_O05) next;
Terser t = new Terser(omsMsg);
for (int i = 0; i < omsMsg.getORDERReps(); i++)
{
    System.out.println(t.get("/ORDER("+i+")/ORC-2-1"));
}

答案 1 :(得分:0)

我不是Terser的专家,但是...

根据documentation,以下是String get(String spec)方法的说明:

  

获取指定字段的字符串值。有关位置规范的语法,请参见类文档。
  如果对于重复的段或字段省略了重复,则使用第一个rep。如果未为Composite字段指定组件或子组件,则使用第一个组件(这使一个组件可以编写可与HL7标准的更高版本一起使用的代码)。

其中spec是字段规范。

通过此操作,如here所述,您可以使用以下代码获取特定网段中的特定组件:

@Test
public void testAccessSegmentRepetitions() throws Exception{
    //First Next of Kin Id
    assertEquals("1", terser.get("NK1(0)-1"));
    //Second Next of Kin Id
    assertEquals("2", terser.get("NK1(1)-1"));
}

输入的HL7消息为:

MSH|^~\\&|hl7Integration|hl7Integration|||||ADT^A01|||2.3|
EVN|A01|20130617154644
PID|1|465 306 5961||407623|Wood^Patrick^^^MR||19700101|1|||High Street^^Oxford^^Ox1 4DP~George St^^Oxford^^Ox1 5AP|||||||
NK1|1|Wood^John^^^MR|Father||999-9999
NK1|2|Jones^Georgie^^^MSS|MOTHER||999-9999
PV1|1||Location||||||||||||||||261938_6_201306171546|||||||||||||||||||||||||20130617134644|||||||||
  

我们可以使用方括号来进行特定的重复。根据我们放在方括号中的位置,我们将获取段重复,字段重复或组件重复。

类似地,在您的情况下,以下代码应该起作用:

mesg.get("/ORC(0)-2-1") //This will return value from first occurrence of segment
mesg.get("/ORC(1)-2-1") //This will return value from second occurrence of segment

更新您的编辑和评论:

关于ORDER的东西,看来很有必要。在这种情况下,请使用以下代码:

mesg.get("/ORDER(2)/ORC(0)-2-1") //This will return value from first occurrence of segment
mesg.get("/ORDER(2)/ORC(1)-2-1") //This will return value from second occurrence of segment