我必须在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" ...
的元素,所以我不会抱怨。)
目前还不清楚你到底在寻找什么(我想这也是为什么有些人想结束这个问题的部分原因);我希望这能有所帮助。祝你好运