コード例 #1
0
        //-----------------------------------------------------------------------
        public XDocument WriteToDocument()
        {
            XDocument doc = new XDocument();

            XElement fakeRoot = new XElement("FAKE_ROOT");

            foreach (var item in m_storedRootItems)
            {
                item.Definition.SaveData(fakeRoot, item, true);
            }
            foreach (var el in fakeRoot.Elements())
            {
                doc.Add(el);
            }

            if (doc.Elements().Count() == 0)
            {
                return(doc);
            }

            doc.Elements().First().SetAttributeValue(XNamespace.Xmlns + "meta", DataDefinition.MetaNS);

            var saveableComments = GraphCommentItems.Where(e => e.Nodes.Count > 0).ToList();

            if (saveableComments.Count > 0)
            {
                var commentStr = string.Join("%", saveableComments.Select(e => e.GUID + "$" + e.Title + "$" + e.ToolTip + "$" + e.Colour.ToCSV()));
                doc.Elements().First().SetAttributeValue(DataDefinition.MetaNS + "GraphCommentData", commentStr);
            }

            if (FlattenData)
            {
                var nodeEl = new XElement(GraphNodeDefinition.NodeStoreName);

                if (IsJson || IsYaml)
                {
                    nodeEl.SetAttributeValue(XNamespace.Xmlns + "json", DataDefinition.JsonNS);
                    nodeEl.SetAttributeValue(DataDefinition.JsonNS + "Array", "true");
                }

                foreach (var node in GraphNodeItems)
                {
                    if (m_storedRootItems.Contains(node) || node.LinkParents.Count == 0)
                    {
                        continue;
                    }

                    node.Definition.SaveData(nodeEl, node);
                }

                doc.Elements().First().Add(nodeEl);
            }

            return(doc);
        }
コード例 #2
0
        //-----------------------------------------------------------------------
        public void Save(string path)
        {
            Directory.CreateDirectory(Path.GetDirectoryName(path));

            XDocument doc = new XDocument();

            XElement fakeRoot = new XElement("FAKE_ROOT");

            foreach (var item in m_storedRootItems)
            {
                item.Definition.SaveData(fakeRoot, item, true);
            }
            foreach (var el in fakeRoot.Elements())
            {
                doc.Add(el);
            }

            if (doc.Elements().Count() == 0)
            {
                return;
            }

            doc.Elements().First().SetAttributeValue(XNamespace.Xmlns + "meta", DataDefinition.MetaNS);

            var saveableComments = GraphCommentItems.Where(e => e.Nodes.Count > 0).ToList();

            if (saveableComments.Count > 0)
            {
                var commentStr = string.Join("%", saveableComments.Select(e => e.GUID + "$" + e.Title + "$" + e.ToolTip + "$" + e.Colour.ToCSV()));
                doc.Elements().First().SetAttributeValue(DataDefinition.MetaNS + "GraphCommentData", commentStr);
            }

            if (FlattenData)
            {
                var nodeEl = new XElement(GraphNodeDefinition.NodeStoreName);

                if (IsJson || IsYaml)
                {
                    nodeEl.SetAttributeValue(XNamespace.Xmlns + "json", DataDefinition.JsonNS);
                    nodeEl.SetAttributeValue(DataDefinition.JsonNS + "Array", "true");
                }

                foreach (var node in GraphNodeItems)
                {
                    if (m_storedRootItems.Contains(node) || node.LinkParents.Count == 0)
                    {
                        continue;
                    }

                    node.Definition.SaveData(nodeEl, node);
                }

                doc.Elements().First().Add(nodeEl);
            }

            if (IsYaml)
            {
                string json = JsonConvert.SerializeXNode(doc, Newtonsoft.Json.Formatting.Indented);
                var    data = ConvertJTokenToObject(JsonConvert.DeserializeObject <JToken>(json));;

                var serializer = new YamlDotNet.Serialization.Serializer();

                using (var writer = new StringWriter())
                {
                    serializer.Serialize(writer, data);
                    var yaml = writer.ToString();
                    File.WriteAllText(path, yaml);
                }
            }
            else if (IsJson)
            {
                string json = JsonConvert.SerializeXNode(doc, Newtonsoft.Json.Formatting.Indented);
                File.WriteAllText(path, json);
            }
            else
            {
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent             = true,
                    IndentChars        = "\t",
                    NewLineChars       = "\r\n",
                    NewLineHandling    = NewLineHandling.Replace,
                    OmitXmlDeclaration = true,
                    Encoding           = new UTF8Encoding(false)
                };

                using (XmlWriter writer = XmlTextWriter.Create(path, settings))
                {
                    doc.Save(writer);
                }
            }
        }