我必须在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
进行通信的正确方法答案 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" ...
的元素更好,所以我不会抱怨。)
目前尚不清楚你正在寻找什么(我认为这是为什么有些人想要关闭这个问题的一部分);我希望这能有所帮助。祝你好运。