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))); }
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)); }
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); }