Пример #1
0
        public XsfManifest(XmlDocument manifest, XmlSchema schema)
        {
            Xml = manifest;
            var xmlns = CreateNameSpaceManager(manifest.NameTable);

            // Template information
            var template = manifest.SelectSingleNode("/xsf:xDocumentClass/xsf:fileNew/xsf:initialXmlDocument", xmlns);
            if ( template == null ) throw new ArgumentException("Wrong manifest format. Can't find xsf:initialXmlDocument element", "manifest");
            TemplateName = template.Attributes["caption"].Value;
            InitialTemplateFile = template.Attributes["href"].Value;

            // Find and store views

            XmlNode views = manifest.SelectSingleNode("/xsf:xDocumentClass/xsf:views", xmlns);
            string defaultViewName = views.Attributes["default"].Value;

            Views = new Dictionary<string, XsfView>();

            foreach ( XmlNode viewNode in views.ChildNodes )
            {
                var view = new XsfView(viewNode, xmlns);
                if ( view.Name == defaultViewName ) DefaultView = view;
                Views.Add(view.Name, view);
            }

            // Find root schema namespace

            var schemaMetadata = new XsfSchemaMetadata(manifest);

            xmlns.AddNamespace("my", schemaMetadata.Namespace);

            Schema = schema;

            var alreadyAddedNodes = new List<string>();
            var schemaElements = Schema.Items.Cast<XmlSchemaElement>().ToList();

            for ( int i = 0; i < schemaElements.Count; i++ )
            {
                var xmlSchemaElement = schemaElements[i];
                if ( alreadyAddedNodes.Contains(xmlSchemaElement.Name) ) continue;
                var field = new FormField();
                FillField(field, schemaElements, xmlSchemaElement, alreadyAddedNodes);
                Fields.Add(field);
            }
        }
Пример #2
0
        public static XsfManifest FromFile(string fileName)
        {
            var manifest = new XmlDocument();
            manifest.Load(fileName);

            var schemaMetadata = new XsfSchemaMetadata(manifest);

            var schemaPath = Path.Combine(Path.GetDirectoryName(fileName), schemaMetadata.FileName);
            XmlSchema schema = null;
            using ( var reader = new StreamReader(schemaPath) )
            {
                schema = XmlSchema.Read(reader, (s, e) => { /* empty validation handler */ });
            }

            return new XsfManifest(manifest, schema);
        }
Пример #3
0
        public static XsfManifest FromBundle(FilesBundle bundle)
        {
            var manifest = new XmlDocument();
            manifest.Load(bundle["manifest.xsf"]);

            var schemaMetadata = new XsfSchemaMetadata(manifest);

            XmlSchema schema = null;
            using (StreamReader reader = new StreamReader(bundle[schemaMetadata.FileName]))
            {
                schema = XmlSchema.Read(reader, (s, e) => { /* empty validation handler */ });
            }

            return new XsfManifest(manifest, schema);
        }