2017-11-07 11 views
-3

c#でisoMessage 8583を送信する必要があります。私は以下のようなXMLファイルを構築しましたXml dtdファイルIso8583可否

フィールドの長さには注意を払わないでください。

これは私の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

これは警告の代わりにdownvotedの理由です – chatay

+0

この質問は[ヘルプセンター](https://stackoverflow.com/help/on-topic)で定義されているトピックではありません。理由を理解できない場合は、[meta]に問い合わせてください。 – Will

+0

@kjhughes私は自分の質問を編集しました。ある文書(銀行で使われているポストブリッジ仕様書)によると、私はこの種のxml形式 – chatay

答えて

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に関するWikipediaの記事では、標準化されたXML構文については何も言及していないので、あなたのXMLフォーマットが存在する場合、そのようなフォーマットによって課せられた構文上の制約を満たすかどうかはわかりません。私は8583を全く知らないので、あなたのフォーマットがISO 8583意味論の正しい表現であるかどうかについては意見がありません。

コミュニティの慣習として、私が行う唯一の推奨事項は、DTDにもっと説明的なコメントを付けることです。 (私はずっとField_2とField_3という名前の要素で作業を好きではないが、私は、私は要素での作業よりもはるかに良いが<Field fieldnum="2" ...... fieldnum="3" ...をタグ付けされたので、私は文句を言わないことを好きと言っている。)

それは必ずしも明らかではありませんあなたが探しているもの(私は、一部の人々が質問を閉じたい理由の一部であると仮定します)。これが少し助けてくれることを願っていますがんばろう。