問題: XML 要素内の受信ドキュメントが XML 形式か Edifact 形式かを確認する必要があります。ドキュメントの形式に応じて、それに応じて処理する必要があります。
現在の解決策: 受信メッセージから XDocument インスタンスが作成されます。着信メッセージは常に XML です。
var originalStream = pInMsg.BodyPart.GetOriginalDataStream();
XDocument xDoc;
using (XmlReader reader = XmlReader.Create(originalStream))
{
reader.MoveToContent();
xDoc = XDocument.Load(reader);
}
この後、ドキュメントは XML 要素「msgbody」から抽出されます。現在、これは XML 形式であると想定されており、ドキュメントが Edifact 形式の場合はエラーがスローされます。以下のコードはそれを抽出し、MessageBox に送信される新しい XDocument を作成します。
string extractedDocument = xDoc.Root.Element("msgbody").Value;
extractedDocument = HttpUtility.HtmlDecode(extractedDocument);
XDocument outputXml = XDocument.Parse(extractedDocument);
Biztalk からのメッセージの例:
<NewTable>
<conversationID>2ff845e7-30a4-482e-98d6-8c3249c5dea1</conversationID>
<hostUTC>2018-12-17T12:17:04.107Z</hostUTC>
<msgType>INVOIC</msgType>
<msgid>721254</msgid>
<icref>36655</icref>
<msgFormat_org>EDIFACTBauhaus</msgFormat_org>
<msgFormat>EDI</msgFormat>
<msgbody>"Edifact or XML document"</msgbody>
<fromID>GLN:5790034516518</fromID>
<toID>GLN:5790000451485</toID>
</NewTable>
質問: ドキュメントを処理する前に、msgbody タグ内のドキュメントのチェックを作成して、XML 形式か Edifact 形式かを判断するにはどうすればよいですか?