我在 smooks 的帮助下在 java 程序中创建 ANSI.X12 消息。我正在使用 xml 文件(使用它们的http://www.milyn.org/schema/edi-message-mapping-1.2.xsd
)自己定义 X12 消息。其中大部分都运行良好,但我确实对 ISA 段有疑问。我将其定义为:
<?xml version="1.0" encoding="UTF-8"?>
<medi:edimap xmlns:medi="http://www.milyn.org/schema/edi-message-mapping-1.2.xsd">
<medi:description name="Some X12 Message Definition" version="1.0" />
<medi:delimiters segment=" " field="*"
component="^" sub-component="~" escape="?" />
<medi:segments xmltag="Segments">
<medi:segment segcode="ISA" xmltag="InterchangeControlHeader">
<medi:field xmltag="AuthorizationInformationQualifier" />
<medi:field xmltag="AuthorizationInformation"/>
<medi:field xmltag="SecurityInformationQualifier"/>
<medi:field xmltag="SecurityInformation"/>
<medi:field xmltag="InterchangeSenderQualifier"/>
<medi:field xmltag="InterchangeSenderID"/>
<medi:field xmltag="InterchangeReceiverQualifier"/>
<medi:field xmltag="InterchangeReceiverID"/>
<medi:field xmltag="InterchangeDate" type="Date" typeParameters="format=yyMMdd"/>
<medi:field xmltag="InterchangeTime" type="Date" typeParameters="format=HHmm"/>
<medi:field xmltag="InterchangeControlStandardsIdentifier"/>
<medi:field xmltag="InterchangeControlVersionNumber"/>
<medi:field xmltag="InterchangeControlNumber"/>
<medi:field xmltag="AcknowledgmentRequested"/>
<medi:field xmltag="UsageIndicator"/>
<medi:field xmltag="ComponentElementSeparator"/>
</medi:segment>
[...]
只要我插入正确长度的字符串,这主要是可用的。问题在于组件分隔符(^
在这种情况下)。ISA 段定义了哪些字符是用于分隔段、元素等的特殊字符。当我将"^"
值放入ComponentElementSeparator
时,它会转义(当然),因为它是一个特殊的字符,并且 smooks 不知道我的 ISA 段是特殊的ISA段。
我明白了
ISA*00* *00* *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*?^
它应该在哪里
ISA*00* *00* *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*^
(注意?
在末尾的^
)。
到目前为止,我得到的唯一解决方法是将一些不同的字符放入medi:delimiters
诸如<medi:delimiters segment=" " field="*" component="<" sub-component="~" escape="?" />
,但是一旦该字符出现在某个地方的数据中,这势必会产生问题。这特别令人沮丧,因为消息甚至不使用任何必须分离的组件。
我在 smooks 的文档中找不到任何相关信息,但必须有某种方法可以做到这一点。毕竟,X12 是我所知道的两个原因之一,任何人都会首先使用 smooks(另一个是 EDIFACT)。
任何人都知道将 ISA 插入到我的 smooks 消息描述中的正确方法吗?