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 static XmbElement Deserialize(BinaryReader reader) { //HEAD var head = new string(reader.ReadChars(2)); if (head != "XN") { throw new Exception("Invalid Node (head does not equal XN)"); } reader.ReadInt32(); //DataLength //BODY var txtLength = reader.ReadUInt32(); var text = Encoding.Unicode.GetString(reader.ReadBytes((int)txtLength * 2)); var nameId = reader.ReadInt32(); var lineNumber = reader.ReadInt32(); //LineNum var attrs = new List <XmbAttribute>(); var num1 = reader.ReadInt32(); for (var index1 = 0; num1 > index1; ++index1) { var attribute = XmbAttribute.Deserialize(reader); attrs.Add(attribute); } var childrenElements = new List <XmbElement>(); var num2 = reader.ReadInt32(); for (var index = 0; num2 > index; ++index) { var childrenElement = Deserialize(reader); childrenElements.Add(childrenElement); } return(new XmbElement(nameId, text, lineNumber, childrenElements, attrs)); }
public static XmbElement DeserializeXmbElement(BinaryReader reader, IReadOnlyList <string> elementNames, IReadOnlyList <string> attrNames) { var head = new string(reader.ReadChars(2)); if (head != "XN") { throw new Exception("Invalid Node (head does not equal XN)"); } var unk0 = reader.ReadInt32(); var txtLength = reader.ReadUInt32(); var text = Encoding.Unicode.GetString(reader.ReadBytes((int)txtLength * 2)); var name = elementNames[reader.ReadInt32()]; var lineNum = reader.ReadInt32(); var attrs = new List <XmbAttribute>(); var num1 = reader.ReadInt32(); for (var index1 = 0; num1 > index1; ++index1) { var index2 = reader.ReadInt32(); var valueLength = reader.ReadUInt32(); var value = Encoding.Unicode.GetString(reader.ReadBytes((int)valueLength * 2)); var xmbAttribute = new XmbAttribute(attrNames[index2], value); attrs.Add(xmbAttribute); } var childs = new List <XmbElement>(); var num2 = reader.ReadInt32(); for (var index = 0; num2 > index; ++index) { var node = DeserializeXmbElement(reader, elementNames, attrNames); childs.Add(node); } return(new XmbElement(unk0, head, name, lineNum, text, childs, attrs)); }