xmlStr
という小さなXMLメッセージに分割する必要があるXMLメッセージmaxSizeBytes
があります。これは、ドキュメントのルートをとって、最初の子をより小さなXMLのベースとし、いくつかの数の<Smt>
要素をとり、新しく形成された(小さい)XMLメッセージにそれらの数を入れることによって行われます。XMLファイルをバイトサイズで予測分割する
<?xml version="1.0"?>
<Bas>
<Hdr>
<Smt>...</Smt>
<Smt>...</Smt>
<Smt>...</Smt>
</Hdr>
</Bas>
現在、私は小さなXMLに入れるsmtNodesPerMessage
ノードを取る に続くメッセージ全体のサイズint smtNodesPerMessage = (int)Math.Ceiling((double)ASCIIEncoding.ASCII.GetByteCount(xmlStr)/(double)maxSizeBytes);
、測定しています:
//doc is original XDocument message
XDocument splitXML = new XDocument(new XElement(doc.Root.Name,
doc.Root.Descendants("Hdr")));
splitXML.Root.Add(batchOfSmt);
を私はすぐに、見つけた小さなXMLファイルのバイトサイズが大きいことですmaxSizeBytes
より大きい。なぜなら、XDocumentは各メッセージに余分な文字を追加し、バイトサイズを増やすからである。
興味深いです。どうすればいいのか教えてください – MickyD
コードはおそらく各メッセージにxml IDを追加しています:<?xml version = "1.0"?> – jdweng
@jdweng、私は 'splitXML.Declaration = doc.Declaration;上のコード。 – newprint