Below is a sample input xml file that I'm trying to parse. I'm able to get the value for most the elements except the 5th element from the REF segment where there are multiple comps. What's happening is, the value being extracted from that 5th element is from the last comp. I'd like to extract all three values. How do I do that? Thanks!! NOTE: I used println to just display the values but I am really using getValue.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<interchange protocol="X12" symbols=">*.? ~">
<segment name="S-ISA" no="1" tag="ISA">
<elem>
<comp>ISA</comp>
</elem>
<elem>
<comp>00</comp>
</elem>
<elem>
<comp>0000000000</comp>
</elem>
<elem>
<comp>00</comp>
</elem>
<elem>
<comp>0000000000</comp>
</elem>
<elem>
<comp>ZZ</comp>
</elem>
<elem>
<comp>GROUP </comp>
</elem>
<elem>
<comp>01</comp>
</elem>
<elem>
<comp>></comp>
</elem>
</segment>
<message release="" type="810" version="">
<segment name="S-ST_1" no="3" tag="ST">
<elem>
<comp>ST</comp>
</elem>
<elem>
<comp>010</comp>
</elem>
</segment>
<segment name="S-REF_5" no="6" tag="REF">
<elem>
<comp>REF</comp>
</elem>
<elem>
<comp>N</comp>
</elem>
<elem>
<comp>123080</comp>
</elem>
<elem>
<comp>FA</comp>
</elem>
<elem>
<comp>DN</comp>
<comp>78729512</comp>
<comp>00000000</comp>
</elem>
</segment>
</interchange>
Below is is part of the code. The method that's failing/not returning the correct result is ReferenceIdentifier.
class IMPORT810InterchangeMapper extends InterchangeMapper{
@Override
JsonFormatWrapper mapInterchange(Interchange interchange)
{
JXPathContext context = this.setContext(interchange)
IMPORT810JsonFormatWrapper Import810JsonFormatWrapper = new IMPORT810JsonFormatWrapper()
this.ImportInvoice(Import810JsonFormatWrapper)
this.Header(Import810JsonFormatWrapper, context)
if (context.getValue("messages/segments[@tag ='REF']")) {
this.ReferenceIdentification(Import810JsonFormatWrapper, context)
}
Import810JsonFormatWrapper
}
void Header(IMPORT810JsonFormatWrapper Import810JsonFormatWrapper, JXPathContext context)
{
InterchangeHeader header = new InterchangeHeader()
header.with {
senderIdQualifier = context.getValue("segments[@tag='ISA']/elem[6]/comp")
senderId = context.getValue("segments[@tag='ISA']/elem[7]/comp")
}
Import810JsonFormatWrapper.importInvoice.interchangeHeader = header
}
void ReferenceIdentification(IMPORT810JsonFormatWrapper Import810JsonFormatWrapper, JXPathContext context)
{
Import810JsonFormatWrapper.importInvoice.referenceIdentificationList = new ArrayList<ReferenceIdentification>()
Iterator referenceIdentificationListitr = context.iterate("messages/segments[@tag ='REF']")
referenceIdentificationListitr.each { group ->
JXPathContext groupContext = JXPathContext.newContext(group)
groupContext.setLenient(true)
ReferenceIdentification referenceIdentification = new ReferenceIdentification()
referenceIdentification.referenceIdentificationQualifier = groupContext.getValue("/elem[2]/comp")
if (groupContext.getValue("/elem[4]/comp")) {
referenceIdentification.referenceDescription = groupContext.getValue("/elem[4]/comp")
}
this.ReferenceIdentifier(referenceIdentification, groupContext)
Import810JsonFormatWrapper.importInvoice.referenceIdentificationList.add(referenceIdentification)
}
}
void ReferenceIdentifier(ReferenceIdentification referenceIdentification, JXPathContext groupContext) {
ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier()
referenceIdentifier.referenceIdQual1 = groupContext.getValue("/elem[5]/comp[1]")
System.out.println("referenceIdentifier.referenceIdQual1 " + referenceIdentifier.referenceIdQual1)
referenceIdentifier.referenceId1 = groupContext.getValue("/elem[5]/comp[2]")
System.out.println("referenceIdentifier.referenceId1 " + referenceIdentifier.referenceId1)
referenceIdentifier.referenceIdQual2 = groupContext.getValue("/elem[5]/comp[3]")
System.out.println("referenceIdentifier.referenceIdQual2 " + referenceIdentifier.referenceIdQual2)
referenceIdentification.referenceIdentifier = referenceIdentifier
}
The expected result should be:
referenceIdentifier.referenceIdQual1 DN
referenceIdentifier.referenceId1 78729512
referenceIdentifier.referenceIdQual2 00000000
But the actual result is:
referenceIdentifier.referenceIdQual1 00000000
referenceIdentifier.referenceId1 null
referenceIdentifier.referenceIdQual2 null