public Package(XmlNode packageNode, Repository repository) { _packageXmlNode = packageNode; _repository = repository; var metadataNodes = new[] { packageNode.SelectSingleNode("child::name"), packageNode.SelectSingleNode("child::version"), packageNode.SelectSingleNode("child::description") }; if (metadataNodes[0] == null) throw new InvalidOperationException("Package XML is missing a name tag."); if (metadataNodes[1] == null) throw new InvalidOperationException("Package XML is missing a version tag."); Name = metadataNodes[0].InnerText; Version = metadataNodes[1].InnerText; Description = metadataNodes[2] != null ? metadataNodes[2].InnerText : string.Empty; _resolvers = ResolverUtil.GetResolverChain(this); var optionsNode = packageNode.SelectSingleNode("child::options"); if (optionsNode != null) Selectors = (from xmlNode in optionsNode.SelectNodes("child::selector").OfType<XmlNode>() select new Selector(xmlNode)).ToArray(); else Selectors = new Selector[] { }; Log.DebugFormat("Opened package, ID is {0}, Name is {1}, Version is {2}", ID, Name, Version); }
public void SelectorParsing() { var xmldoc = new XmlDocument(); xmldoc.LoadXml("<selector id=\"awesomeselector\"><choice value=\"1\" default=\"false\">A</choice><choice value=\"2\" default=\"true\">B</choice><choice value=\"3\" description=\"test\">C</choice></selector>"); Selector s = new Selector(xmldoc.FirstChild); if (s.AvailableOptions.Count != 3) throw new Exception("Options count mismatch"); if (s.CurrentOption.Value != "2") throw new Exception("Default value mismatch"); }