public string ToXml()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("<EbxFile Guid=\"");
            for (int i = 0; i < 16; i++)
            {
                sb.Append(FileGuid[i].ToString("X2"));
            }
            sb.Append("\">\n");
            DAIEbx.TabCount++;

            for (int i = 0; i < Instances.Count; i++)
            {
                byte[]     Guid         = Instances.Keys.ElementAt(i);
                DAIComplex ComplexValue = Instances.Values.ElementAt(i);

                String GuidString = "";
                for (int j = 0; j < Guid.Length; j++)
                {
                    GuidString += Guid[j].ToString("X2");
                }

                sb.Append(DAIEbx.Tabs() + "<" + ComplexValue.Descriptor.FieldName + " Guid=\"");
                for (int j = 0; j < 16; j++)
                {
                    sb.Append(Guid[j].ToString("X2"));
                }
                sb.Append("\">\n");
                DAIEbx.TabCount++;

                ComplexValue.ToXml(this, ref sb, false);

                DAIEbx.TabCount--;
                sb.Append(DAIEbx.Tabs() + "</" + ComplexValue.Descriptor.FieldName + ">\n");
            }

            DAIEbx.TabCount--;
            sb.Append("</EbxFile>\n");

            return(sb.ToString());
        }
        public void ToXml(DAIEbx EbxFile, ref StringBuilder sb)
        {
            if (Descriptor.FieldName == "$")
            {
                DAIEbx.TabCount--;
                ComplexValue.ToXml(EbxFile, ref sb);
                DAIEbx.TabCount++;
                return;
            }

            sb.Append(DAIEbx.Tabs() + "<" + Descriptor.FieldName + ">");

            switch (ValueType)
            {
            case DAIFieldType.DAI_Complex:
            case DAIFieldType.DAI_Array:
                sb.Append("\n");
                if (ComplexValue != null)
                {
                    ComplexValue.ToXml(EbxFile, ref sb);
                }
                else
                {
                    sb.Append("[null]\n");
                }
                sb.Append(DAIEbx.Tabs() + "</" + Descriptor.FieldName + ">\n");
                return;

            case DAIFieldType.DAI_String:
                sb.Append(GetStringValue());
                break;

            case DAIFieldType.DAI_Int:
                sb.Append(GetIntValue().ToString("X8"));
                break;

            case DAIFieldType.DAI_UInt:
                sb.Append(GetUIntValue().ToString("X8"));
                break;

            case DAIFieldType.DAI_Float:
                sb.Append(GetFloatValue().ToString("F3"));
                break;

            case DAIFieldType.DAI_Short:
                sb.Append(GetShortValue().ToString("X4"));
                break;

            case DAIFieldType.DAI_UShort:
                sb.Append(GetUShortValue().ToString("X4"));
                break;

            case DAIFieldType.DAI_Byte:
                sb.Append(GetByteValue().ToString("X2"));
                break;

            case DAIFieldType.DAI_UByte:
                sb.Append(GetByteValue().ToString("X2"));
                break;

            case DAIFieldType.DAI_Long:
                sb.Append(GetLongValue().ToString("X16"));
                break;

            case DAIFieldType.DAI_LongLong:
                for (int i = 0; i < Value.Length; i++)
                {
                    sb.Append(Value[i].ToString("X2"));
                }
                break;

            case DAIFieldType.DAI_Bool:
                sb.Append(GetBoolValue().ToString());
                break;

            case DAIFieldType.DAI_Enum:
                sb.Append(GetEnumValue());
                break;

            case DAIFieldType.DAI_Guid:
            {
                uint UIntValue = GetUIntValue();
                if ((UIntValue >> 31) == 1)
                {
                    /* External Guid */
                    DAIExternalGuid Guid = EbxFile.ExternalGuids.ElementAt((int)(UIntValue & 0x7fffffff));
                    System.Data.SQLite.SQLiteConnection con = Database.GetConnection();
                    con.Open();
                    System.Data.SQLite.SQLiteDataReader reader = new System.Data.SQLite.SQLiteCommand("SELECT name,type FROM ebx WHERE guid = '" + Guid.FileGuidString() + "'", con).ExecuteReader();
                    reader.Read();
                    sb.Append("[" + reader.GetString(1) + "] " + reader.GetString(0));
                }
                else if (UIntValue == 0)
                {
                    /* NULL Guid */
                    sb.Append("[null]");
                }
                else
                {
                    /* Internal Guid */
                    byte[] Guid = EbxFile.InternalGuids[(int)(UIntValue - 1)];
                    sb.Append("[" + EbxFile.Instances[Guid].Descriptor.FieldName + "] ");
                    for (int i = 0; i < Guid.Length; i++)
                    {
                        sb.Append(Guid[i].ToString("X2"));
                    }
                }
            }
            break;
            }

            sb.Append("</" + Descriptor.FieldName + ">\n");
            return;
        }