// Used in code snippet 1.
        static void ProcessStructElement(SElement element, int indent)
        {
            if (!element.IsValid())
            {
                return;
            }

            // Print out the type and title info, if any.
            PrintIndent(indent++);
            Console.Write("Type: " + element.GetType());
            if (element.HasTitle())
            {
                Console.Write(". Title: " + element.GetTitle());
            }

            int num = element.GetNumKids();

            for (int i = 0; i < num; ++i)
            {
                // Check is the kid is a leaf node (i.e. it is a ContentItem).
                if (element.IsContentItem(i))
                {
                    ContentItem      cont = element.GetAsContentItem(i);
                    ContentItem.Type type = cont.GetType();

                    Page page = cont.GetPage();

                    PrintIndent(indent);
                    Console.Write("Content Item. Part of page #" + page.GetIndex());

                    PrintIndent(indent);
                    switch (type)
                    {
                    case ContentItem.Type.e_MCID:
                    case ContentItem.Type.e_MCR:
                        Console.Write("MCID: " + cont.GetMCID());
                        break;

                    case ContentItem.Type.e_OBJR:
                    {
                        Console.Write("OBJR ");
                        Obj ref_obj = cont.GetRefObj();
                        if (ref_obj != null)
                        {
                            Console.Write("- Referenced Object#: " + ref_obj.GetObjNum());
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
                else                    // the kid is another StructElement node.
                {
                    ProcessStructElement(element.GetAsStructElem(i), indent);
                }
            }
        }
Пример #2
0
        /**
         * <p>parseContentList.</p>
         *
         * @param text a {@link java.lang.String} object.
         * @throws iqq.im.QQException if any.
         */
        public void parseContentList(String text)
        {
            try {
                JSONArray json = new JSONArray(new JSONTokener(new StringReader(text)));
                for (int i = 0; i < json.length(); i++)
                {
                    Object value = json.get(i);
                    if (value is JSONArray)
                    {
                        JSONArray items = (JSONArray)value;

                        ContentItem.Type type = (ContentItem.Type)Enum.Parse(typeof(ContentItem.Type), items.getString(0), true);
                        switch (type)
                        {
                        case ContentItem.Type.FACE:    addContentItem(new FaceItem(items.ToString())); break;

                        case ContentItem.Type.FONT:    addContentItem(new FontItem(items.ToString())); break;

                        case ContentItem.Type.CFACE:   addContentItem(new CFaceItem(items.ToString())); break;

                        case ContentItem.Type.OFFPIC: addContentItem(new OffPicItem(items.ToString())); break;

                        default: break;
                        }
                    }
                    else if (value is String)
                    {
                        addContentItem(new TextItem((String)value));
                    }
                    else
                    {
                        throw new QQException(QQWpfApplication1.action.QQException.QQErrorCode.UNKNOWN_ERROR, "unknown msg content type:" + value.ToString());
                    }
                }
            } catch (JSONException e) {
                throw new QQException(QQWpfApplication1.action.QQException.QQErrorCode.JSON_ERROR, e);
            }
        }