Xml dtd文件Iso8583是否可接受

时间:2017-11-07 19:28:25

标签: xml 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

进行通信的正确方法

1 个答案:

答案 0 :(得分:0)

是否“可接受”取决于验收标准;这些取决于您所提供的内容,而不是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等元素。可能存在其他差异;报告它们的机器要比人类好得多。

快速浏览维基百科关于ISO 8583的文章没有提及标准化的XML语法,所以我不知道你的XML格式是否满足这种格式所存在的任何语法限制。由于我根本不知道8583,我对你的格式是否是ISO 8583语义的正确表示没有意见。

至于社区惯例,我提出的唯一建议是在DTD中提供更多解释性意见。 (我不太喜欢使用名为Field_2和Field_3的元素,但我必须说我比使用标记为<Field fieldnum="2" ...... fieldnum="3" ...的元素更好,所以我不会抱怨。)

目前尚不清楚你正在寻找什么(我认为这是为什么有些人想要关闭这个问题的一部分);我希望这能有所帮助。祝你好运。