Exemple #1
0
        public static XmbDocument ParseXmb(XmbFile xmb)
        {
            var xml = xmb.RootNode.ToXml(xmb.ElementNames, xmb.AttributeNames);

            xml = XmlFileUtils.PrettyXml(xml);
            return(new XmbDocument(XDocument.Parse(xml,
                                                   LoadOptions.SetBaseUri | LoadOptions.SetLineInfo | LoadOptions.PreserveWhitespace)));
        }
Exemple #2
0
        public static XmbElement Deserialize(XElement xmlElement, ref IList <string> elementNames,
                                             ref IList <string> attributeNames)
        {
            int nameId;

            if (elementNames.Contains(xmlElement.Name.LocalName))
            {
                nameId = elementNames.IndexOf(xmlElement.Name.LocalName);
            }
            else
            {
                elementNames.Add(xmlElement.Name.LocalName);
                nameId = elementNames.Count - 1;
            }

            var value    = string.Empty;
            var textNode = xmlElement.Nodes().FirstOrDefault(key => key.NodeType == XmlNodeType.Text);

            if (textNode != null)
            {
                value = XmlFileUtils.FromXmlString(textNode.ToString());
            }

            IList <XmbAttribute> attributes = new List <XmbAttribute>();

            if (xmlElement.HasAttributes)
            {
                foreach (var attribute in xmlElement.Attributes())
                {
                    attributes.Add(XmbAttribute.Deserialize(attribute, ref attributeNames));
                }
            }

            IList <XmbElement> elements = new List <XmbElement>();

            if (xmlElement.HasElements)
            {
                foreach (var element in xmlElement.Elements())
                {
                    elements.Add(Deserialize(element, ref elementNames, ref attributeNames));
                }
            }

            var lineNumber = ((IXmlLineInfo)xmlElement).LineNumber;

            return(new XmbElement(nameId, value, lineNumber, (List <XmbElement>)elements,
                                  (List <XmbAttribute>)attributes));
        }
Exemple #3
0
        public string ToXml(IReadOnlyList <string> elementNames,
                            IReadOnlyList <string> attrNames, string indent = "")
        {
            var str1 = "\r\n" + indent + "<" + elementNames[NameId];

            foreach (var t in Attributes)
            {
                var name  = attrNames[t.NameId];
                var value = XmlFileUtils.ToXmlString(t.Value, true);
                str1 = str1 + " " + name + "=\"" + value + "\"";
            }

            string str2;

            if (!string.IsNullOrWhiteSpace(Value))
            {
                var text = XmlFileUtils.ToXmlString(Value.Trim());

                if (ChildrenElements.Count > 0)
                {
                    var str3 = str1 + ">\r\n" + indent + "\t" + text;
                    str3 = ChildrenElements.Aggregate(str3,
                                                      (current, t) => current + t.ToXml(elementNames, attrNames, indent + "\t"));
                    str2 = str3 + "\r\n" + indent + "</" + elementNames[NameId] + ">";
                }
                else
                {
                    str2 = str1 + ">" + text + "</" + elementNames[NameId] + ">";
                }
            }
            else if (ChildrenElements.Count > 0)
            {
                var str3 = str1 + ">";
                str3 = ChildrenElements.Aggregate(str3,
                                                  (current, t) => current + t.ToXml(elementNames, attrNames, indent + "\t"));
                str2 = str3 + "\r\n" + indent + "</" + elementNames[NameId] + ">";
            }
            else
            {
                str2 = str1 + "/>";
            }

            return(str2);
        }