public static void ParseFacts(XDocument report, Instance instance) { var factElements = FindFacts(report); var facts = new FactCollection(instance); foreach (var factElement in factElements) { var name = factElement.Attribute("name").Value; var prefix = name.Split(':').First(); var ns = report.Root.GetNamespaceOfPrefix(prefix).ToString(); var unitRef = factElement.Attribute("unitRef")?.Value; var decimals = factElement.Attribute("decimals")?.Value; var value = factElement.Value; var scale = factElement.Attribute("scale")?.Value; if (!string.IsNullOrWhiteSpace(scale)) { var power = int.Parse(scale); var v = decimal.Parse(value.Replace(" ", "")); var multiplier = (decimal)Math.Pow(10, power); v *= multiplier; value = v.ToString(); } var contextRef = factElement.Attribute("contextRef").Value; var fact = new Fact(name, ns, unitRef, decimals, contextRef, value); facts.Add(fact); } foreach (var fact in facts) { instance.Facts.Add(fact); } }
internal void GetElementTree(FactCollection Facts, XmlElement[] value) { if (value != null) { foreach (var element in value) { var fact = Fact.FromXmlElement(element); Facts.Add(fact); if (element.InnerXml != element.InnerText) { GetElementTree(fact.Facts, element.ChildNodes.Cast <XmlElement>().ToArray <XmlElement>()); } } } }