Проблема : мне нужно проверить, отформатирован ли входящий документ внутри элемента 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.Приведенный ниже код извлекает его и создает новый XDocument, который отправляется в MessageBox.
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, до его обработки?