Xml dtd文件Iso8583是否可接受



我必须在c#中发送一个isoMessage 8583。我构建了如下所示的XML文件

不要注意字段的长度,我只是想知道这是否可以接受?

这是我的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Iso8583PostXml SYSTEM "genericpackager.dtd">
<isopackager>
<MsgType>0200</MsgType>
<isofield>
<Field_2>5555555555555555</Field_2>
<Field_3>01</Field_3>
<Field_4>0001</Field_4>
<Field_5>11223344</Field_5>
<Field_6>000000000001</Field_6>
<Field_7>000000000000</Field_7>
<Field_8>0792</Field_8>
<Field_9>0000000000</Field_9>
<Field_10>0949</Field_10>
<Field_11>170101</Field_11>
<Field_12>00</Field_12>
<Field_13>3800</Field_13>
<Field_14>0110A080002A3400CAE200000000000000FF</Field_14>
<Field_15>0000000000000000</Field_15>
<Field_16>00</Field_16>
<Field_17>3030</Field_17>
</isofield>
</isopackager>

和我的xml dtd文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT isopackager (isofield+,isofieldpackager*,MsgType)*>
<!ELEMENT MsgType (#PCDATA)>
<!ATTLIST isopackager maxValidField     CDATA        #IMPLIED>
<!ATTLIST isopackager bitmapField       CDATA        #IMPLIED>
<!ATTLIST isopackager thirdBitmapField  CDATA        #IMPLIED>
<!ATTLIST isopackager firstField        CDATA        #IMPLIED>
<!ATTLIST isopackager emitBitmap        (true|false) #IMPLIED>
<!ATTLIST isopackager headerLength      CDATA        #IMPLIED>
<!-- isofield -->
<!ELEMENT isofield (#PCDATA)>
<!ATTLIST isofield id     CDATA        #REQUIRED>
<!ATTLIST isofield length CDATA        #REQUIRED>
<!ATTLIST isofield name   CDATA        #REQUIRED>
<!ATTLIST isofield class  NMTOKEN      #REQUIRED>
<!ATTLIST isofield token  CDATA        #IMPLIED>
<!ATTLIST isofield pad    (true|false) #IMPLIED>
<!-- isofieldpackager -->
<!ELEMENT isofieldpackager (isofield+,isofieldpackager*)*>
<!ATTLIST isofieldpackager id       CDATA        #REQUIRED>
<!ATTLIST isofieldpackager name     CDATA        #REQUIRED>
<!ATTLIST isofieldpackager length   CDATA        #REQUIRED>
<!ATTLIST isofieldpackager class    NMTOKEN      #REQUIRED>
<!ATTLIST isofieldpackager token    CDATA        #IMPLIED>
<!ATTLIST isofieldpackager pad      (true|false) #IMPLIED>
<!ATTLIST isofieldpackager packager NMTOKEN      #REQUIRED>
<!ATTLIST isofieldpackager emitBitmap (true|false) #IMPLIED>
<!ATTLIST isofieldpackager maxValidField CDATA        #IMPLIED>
<!ATTLIST isofieldpackager bitmapField CDATA        #IMPLIED>
<!ATTLIST isofieldpackager firstField  CDATA        #IMPLIED>
<!ATTLIST isofieldpackager headerLength  CDATA        #IMPLIED>

我将发送与dtd文件相关的xml格式的文件。我不确定这是否是与这种类型的xml 通信的正确方式

是否"可接受"取决于验收标准;这些取决于您为收件人提供的内容,而不是XML规范,因此您的主要问题无法在这里得到回答。然而,我想你的意思是"这个DTD符合XML规范吗,这个XML实例对这个DTD有效吗,它们两者一起符合ISO 8583吗,我做事的方式是否违反了一些广泛遵循的社区惯例?">

您可以通过将文件保存在某个位置并在其上运行XML验证器来检查DTD是否符合,以及XML是否对其有效。(如果你不知道如何做到这一点,或者不知道我的意思,那么通过承诺提供XML编码的消息,你可能已经吃不饱了。)我在DTD文件中没有看到任何语法错误,但我不是机器检查器,我也没有用XML解析器检查你的DTD。(我会去掉DTD文件中的XML声明,但我不确定是否有错误。)

然而,DTD并没有描述您的XML。它声明了名为isopackager、MsgType、isofield和isofieldpackager的元素类型;最后一个不会出现在XML中。XML包含名为Field_2、Field_3等的元素,这些元素未在DTD中声明。isofield的声明指出,该元素类型的有效实例包含字符数据,并且仅包含字符数据。但XML中的isofield元素包含一系列名为Field_2、Field_3等的元素。可能存在其他差异;机器比人类更善于报告它们。

快速浏览一下维基百科上关于ISO8583的文章,没有提到标准化的XML语法,所以我不知道你的XML格式是否满足这种格式所施加的任何语法约束(如果存在的话)。由于我根本不知道8583,我对您的格式是否是ISO 8583语义的正确表示没有意见。

至于社区约定,我唯一的建议是在DTD中有更多的解释性注释。(我不太喜欢使用名为Field_2和Field_3的元素,但我不得不说,我更喜欢使用标记为<Field fieldnum="2" ...... fieldnum="3" ...的元素,所以我不会抱怨。)

目前还不清楚你到底在寻找什么(我想这也是为什么有些人想结束这个问题的部分原因);我希望这能有所帮助。祝你好运

最新更新