mirror of
https://github.com/MAKS-IT-COM/maksit-postclient.git
synced 2026-11-13 21:56:11 +01:00
64 lines
1.7 KiB
C#
64 lines
1.7 KiB
C#
using System.Xml;
|
|
|
|
|
|
namespace MaksIT.PostClient.Shared;
|
|
|
|
|
|
public static class RemEvidenceParser {
|
|
public sealed class Data {
|
|
public string Event { get; init; } = "";
|
|
|
|
public string RelatedMessageId { get; init; } = "";
|
|
|
|
public string EvidenceId { get; init; } = "";
|
|
}
|
|
|
|
public static Data? Parse(string? xml) {
|
|
if (!EnvelopeClassifier.LooksLikeEtsi(xml))
|
|
return null;
|
|
try {
|
|
var settings = new XmlReaderSettings {
|
|
DtdProcessing = DtdProcessing.Prohibit,
|
|
XmlResolver = null,
|
|
IgnoreComments = true
|
|
};
|
|
var document = new XmlDocument { XmlResolver = null };
|
|
using (var reader = XmlReader.Create(new StringReader(xml!), settings))
|
|
document.Load(reader);
|
|
var ev = First(document, "EventCode", "eventCode", "EvidenceType", "eventType", "Type");
|
|
var related = First(
|
|
document,
|
|
"RelatesTo",
|
|
"RelatedTo",
|
|
"OriginalMessageId",
|
|
"MessageIdentifier",
|
|
"UAMessageId",
|
|
"msgid");
|
|
var id = First(document, "EvidenceIdentifier", "EvidenceId", "identificativo");
|
|
if (string.IsNullOrWhiteSpace(ev) && string.IsNullOrWhiteSpace(related))
|
|
return null;
|
|
return new Data {
|
|
Event = ev,
|
|
RelatedMessageId = related,
|
|
EvidenceId = id
|
|
};
|
|
}
|
|
catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static string First(XmlDocument document, params string[] names) {
|
|
foreach (var name in names) {
|
|
var nodes = document.GetElementsByTagName(name);
|
|
foreach (XmlNode node in nodes) {
|
|
var text = (node.InnerText ?? "").Trim();
|
|
if (text.Length > 0)
|
|
return text;
|
|
}
|
|
}
|
|
|
|
return "";
|
|
}
|
|
}
|