private void LoadXml(XmlReader xmlReader) { var result = new List <TernarAccord>(); var nav = new XPathDocument(xmlReader).CreateNavigator(); var manager = new XmlNamespaceManager(nav.NameTable); manager.AddNamespace("act", "urn:asc.notify.action_pattern.xsd"); var nodes = nav.Select("act:accordings/action", manager); while (nodes.MoveNext()) { var actNav = nodes.Current; var actionID = actNav.GetAttribute("actionID", ""); var action = _ActionProvider.GetAction(actionID); if (action == null) { log.Error(String.Format("action with id=\"{0}\" not instanced", actionID)); continue; } var defaultActionPattern = actNav.GetAttribute("defaultPatternID", ""); if (!String.IsNullOrEmpty(defaultActionPattern)) { var defaultPattern = _PatternProvider.GetPattern(defaultActionPattern); if (defaultPattern == null) { log.Error(String.Format("pattern with id=\"{0}\" not instanced", defaultActionPattern)); continue; } result.Add(new TernarAccord(action, new Accord(null, defaultPattern))); } var sendersNodes = actNav.SelectChildren("sender", ""); while (sendersNodes.MoveNext()) { var senderName = sendersNodes.Current.GetAttribute("senderName", ""); var patternID = sendersNodes.Current.GetAttribute("patternID", ""); var pattern = _PatternProvider.GetPattern(patternID); if (pattern == null) { log.Error(String.Format("pattern with id=\"{0}\" not instanced", patternID)); continue; } result.Add(new TernarAccord(action, new Accord(senderName, pattern))); } } _ConstProvider = new ConstActionPatternProvider(result.ToArray()); }