下面是我尝试解析的示例输入 xml 文件。除了 REF 段中的第 5 个元素之外,我能够获得大多数元素的值,其中有多个组合。发生的事情是,从第 5 个元素中提取的值来自最后一个组合。我想提取所有三个值。我怎么做?谢谢!!注意:我使用 println 来显示值,但我实际上使用的是 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>
以下是部分代码。失败/未返回正确结果的方法是 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
}
预期的结果应该是:
referenceIdentifier.referenceIdQual1 DN
referenceIdentifier.referenceId1 78729512
referenceIdentifier.referenceIdQual2 00000000
但实际结果是:
referenceIdentifier.referenceIdQual1 00000000
referenceIdentifier.referenceId1 null
referenceIdentifier.referenceIdQual2 null