亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xmlprocessor.cpp

?? funambol windows mobile plugin source code, the source code is taken from the funambol site
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    if (countTag > 0) {
        validElement = new int[countTag];
        for (l = 0; l < countTag; l++) {
            validElement[l] = 1;
        }
    }

    char* internal = stringdup(except);
    char* p1, *p2;
    p1 = p2 = internal;
    int i = 0, k = 0, len = 0;

    while (strstr(p2, "&") != NULL) {
        len = strlen(p2);
        for (k = 0; k < len; k++) {
            if (*p1 == 0) {
                break;
            }
            else if (*p1 == '&') {
                *p1 = 0;
                array[i] = stringdup(p2);
                p1 = p1 + 1;
                p2 = p1;
                i++;
                break;
            }
            p1 = p1 + 1;
        }
    }

    if (i == 0 || k < len) {
        if (array[i]) { delete [] array[i]; array[i] = NULL; }
        array[i] = stringdup(p2);
        i++;
    }

    for (int s = 0; s < count; s ++) {
        i = 0;

        do {
            safeDel(&ret);
            k = 0;

            pos = 0, previous = 0;
            while ((ret = copyElementContent(&xml[pos], tag, &pos)) != NULL) {

                if (validElement && validElement[k] == 1) {
                    pos += previous;
                    position = 0;
                    previousPosition = 0;
                    startPos = 0;
                    endPos   = 0;
                    while ((found = getElementContent(&xml[position], array[i], &position, &startPos, &endPos)) != NULL ) {

                        startPos += previousPosition;
                        endPos   += previousPosition;
                        position += previousPosition;
                        if (startPos < pos && pos < endPos) {
                            notValid = TRUE;
                            break;
                        }
                        previousPosition = position;

                    }

                    if (notValid) {
                        notValid = FALSE;
                        safeDel(&ret);
                        validElement[k] = 0;
                    } else {
                        if (post) {
                            *post = pos;
                        }
                        break;
                    }
                    previous = pos;
                    k++;
                } else {
                    pos += previous;
                    previous = pos;
                    k++;
                    safeDel(&ret); // if (ret) { delete [] ret; ret = NULL; }
                }
            }
            i++;

        } while(array[i] != NULL);

        if (count > 1) {
            char* tmp = stringdup(array[0]);

            for (int m = 0; m < count - 1; m++) {
                if (array[m]) { delete [] array[m]; array[m] = NULL; }
                //safeDel(&array[m]);
                array[m] = stringdup(array[m+1]);
            }
            //safeDel(&array[count-1]);
            if (array[count-1]) { delete [] array[count-1]; array[count-1] = NULL; }
            array[count-1] = stringdup(tmp);
            safeDel(&tmp);
        }
    }

    if (notValid) {
        if (ret) {
            safeDel(&ret);
        }
        if (post) {
            *post = 0;
        }
    } else {
        ;
    }

    safeDel(&internal);
    if (validElement) {
        delete [] validElement; validElement = NULL;
    }

    for (l = 0; l <= count; l++) {
        if (array[l]) { delete [] array[l]; array[l] = NULL; }
    }
    delete [] array; array = NULL;
    //safeDelete(array);

    return ret;
}

/*
* It returns getElementContent value but it depends on the level that is specified.
* It return only ... to keep ... independently on the tag in which it is contained if lev is zero.
*
*   <Sync>
*     <Add>... to avoid ...</Add>
*   </Sync>
*   <Add>... to keep ...</Add>
*   <Sync>
*     <Add>... to avoid ...</Add>
*   </Sync>
*    <Atomic>
*     <Add>... to avoid ...</Add>
*   </Atomic>
*
* The parameters are:
* xml: the xml to analize
* tag: the name of the tag to use
* lev: the inner level in which discover the tag
* startLevel: the starting level from which start the search
* pos: the position index search end
*
* The follow piece of code explain how get the value tag "... to keep ..." that is in the root (0) level.
* Note the startLevel declaration and initialization to -1 value
*
*
*    char* p = NULL;
*    unsigned int pos = 0, previous = 0;
*    int startLevel = -1;
*    while ((p = XMLProcessor::getElementContentLevel(&xml[pos], "Add", 0, &startLevel, &pos)) != NULL) {
*        pos += previous;
*        previous = pos;
*    }
*
*/

char* XMLProcessor::copyElementContentLevel(const char*xml   ,
                                            const char*tag   ,
                                            unsigned int* pos,
                                            int           lev ,
                                            int*          startLevel)  {

    const char* p1 = NULL;
    const char* p2 = NULL;
    char* ret = NULL;
    BOOL openBracket  = FALSE;  // <
    BOOL closeBracket = FALSE;  // >
    BOOL aloneBracket = FALSE;  // </
    BOOL preCloseBracket = FALSE;  //<.../
    BOOL openTag      = FALSE;
    BOOL closeTag     = FALSE;

    char tagNameFound[40];

    int level               = -1;
    unsigned int xmlLength  = (unsigned int)-1;
    unsigned int l          = (unsigned int)-1;
    unsigned int previousIndex = (unsigned int)-1;
    unsigned int i          =  0;

    if (xml == NULL) {
        goto finally;
    }

    if (lev < 0) {
        return copyElementContent(xml, tag, pos);
    }

    xmlLength = strlen(xml);
    l = strlen(tag);

    if (pos != NULL) {
        *pos = 0;
    }
    if (startLevel != NULL) {
       level = *startLevel;
    }

    p1 = p2 = xml;

    for (i = 0; i < xmlLength; i ++) {
        if (!strncmp(p1 + i, "<![CDATA[", strlen("<![CDATA["))) {
            // skip over content
            while(p1[i]) {
                i++;
                if (!strcmp(p1 + i, "]]>")) {
                    i += strlen("]]>");
                    break;
                }
            }
        }
        if (p1[i] == '<') {
            openBracket = TRUE;
            previousIndex = i;
            p2 = &p1[i];

        } else if (p1[i] == '/') {
            if (previousIndex == (i - 1)) {
                // </...>
                preCloseBracket = TRUE;
            } else {
                // might be <.../>, which will be checked below
                // with p1[i - 1] == '/'
            }

        } else if (p1[i] == '>') {

            if (openBracket == FALSE) {
                closeBracket = FALSE;
                preCloseBracket = FALSE;
            } else {
                if (preCloseBracket) {
                    closeTag = TRUE;
                }
                else if (openBracket && p1[i - 1] == '/') {
                    // <.../>: do not change levels or open tag,
                    // it has been closed already
                } else {
                    openTag = TRUE;
                }
                closeBracket = TRUE;

                if (closeTag) {
                    level--;
                    openBracket  = FALSE;
                    closeBracket = FALSE;
                    preCloseBracket = FALSE;
                    openTag      = FALSE;
                    closeTag     = FALSE;

                } else if (openTag) {
                    level++;
                } else {
                    openBracket  = FALSE;
                    closeBracket = FALSE;
                    preCloseBracket = FALSE;
                    openTag      = FALSE;
                    closeTag     = FALSE;

                }
            }
        }
          if (openTag && openBracket && closeBracket) {
            int n = (&p1[i] - p2 - 1);
            strncpy(tagNameFound, p2 + 1, n);
            tagNameFound[n] = 0;
            if (strcmp(tagNameFound, tag) == 0 && (level == lev)) {
                unsigned int internalPos;
                ret = copyElementContent(p2, tag, &internalPos);
                if (pos) {
                    *pos = p2 - xml + internalPos;
                }
                if (startLevel) {
                    *startLevel = level - 1;
                }
                break;
            }
            openBracket  = FALSE;
            closeBracket = FALSE;
        }
    }

finally:
    openBracket  = FALSE;
    closeBracket = FALSE;
    preCloseBracket = FALSE;
    openTag      = FALSE;
    closeTag     = FALSE;
    return ret;

}

/**
 * Get the attribute list of the forst element 'tag', returning a pointer
 * to the beginning of the string in the original buffer 'xml', and the
 * starting and ending position of the substring.
 *
 * @param xml - the XML document to process.
 * @param tag - the tag name to find
 * @param startPos - return value - the start pos of the attribute list
 * @param endPos - return value - the end position of the attribute list
 */
const char* XMLProcessor::getElementAttributes(const char* xml,
                                          const char* tag,
                                          unsigned int* startPos,
                                          unsigned int* endPos,
                                          bool escaped) {

    const char* p1 = NULL;
    const char* p2 = NULL;
    BOOL charFound  = FALSE;
    unsigned int l = strlen(tag);

    // example ot tag with attribute list
    // <body enc="base64">
    char *openTag = 0; //<tag

    if (!xml) {
        goto finally;
    }

    if(strcmp(tag, "CDATA") == 0) {
        goto finally;
    }
    else {
        openTag = new char[l+10];
        if (escaped){
            sprintf(openTag, "&lt;%s ", tag);
        }
        else{
            sprintf(openTag, "<%s ", tag);
        }
    }

    p1 = strstr(xml, openTag);

    if (!p1) {
        LOG.info("XMLProcessor: tag %s not found", tag);
        goto finally;
    }
    // move to the beginning of the attribute list
    p1 += strlen(openTag);

    // find the end of the tag
    for (p2 = p1; *p2 != '>'; p2++) {
        if(*p2 == 0 || *p2 == '<'){
            LOG.info("XMLProcessor: incomplete tag");
            goto finally;
        }
    }
    // set the return parameters
    if (startPos != NULL) {
        *startPos = p1 - xml;
    }
    if (endPos != NULL) {
        *endPos = p2 - xml ;
    }

    finally:

    if (openTag)
        delete [] openTag;

    return p1;

}


StringBuffer XMLProcessor::makeElement(const char* tag, const char* val, const char* attr)
{
    StringBuffer s;

    if (!val)
        return s;
    if (!val[0])
        return s;

    size_t len = strlen(tag);
    char* t1 = new char[len + 4]; // <  >  0, whitout closing >
    char* t2 = new char[len + 6]; // </ > \n 0

    sprintf(t1, "<%s", tag);
    sprintf(t2, "</%s>\n", tag);

    s = t1;
    if (attr != NULL)
    {
        s += " ";
        s += attr;
    }
    s += ">";
    s += val; s += t2;

    delete [] t1;
    delete [] t2;

    return s;
}


StringBuffer XMLProcessor::makeElement(const char* tag,
                                    const char* val,
                                    ArrayList attrList) {

    StringBuffer s;

    for (int i = 0; i < attrList.size(); i++)
    {
        KeyValuePair* item = (KeyValuePair*)attrList[i];
        if (i > 0)
            s += " ";
        s += item->getKey();
        s += "=\"";
        s += item->getValue();
        s += "\"";
    }
    s = makeElement(tag, val, s.c_str());

    return s;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲欧美中文| 国产精品电影一区二区| 久久综合九色综合97_久久久| 亚洲最新在线观看| 51精品久久久久久久蜜臀| 麻豆久久一区二区| 日韩理论片在线| 精品捆绑美女sm三区| 色诱亚洲精品久久久久久| 久久黄色级2电影| 一区二区国产盗摄色噜噜| 亚洲精品高清视频在线观看| 26uuu精品一区二区| 久久网站热最新地址| 久久九九99视频| 中文字幕日韩欧美一区二区三区| 日韩一级黄色片| 欧美午夜不卡视频| 国产不卡免费视频| 久久99久久精品欧美| 久久久久国产精品免费免费搜索| 欧美人成免费网站| 91久久精品一区二区三| 国产91综合网| 欧美在线综合视频| 色婷婷香蕉在线一区二区| 欧美性高清videossexo| 欧美成人伊人久久综合网| 国产日韩精品视频一区| 成人av集中营| 国产一区在线不卡| 美女爽到高潮91| 成人福利视频在线看| 欧美日韩国产一二三| 国产视频视频一区| 午夜欧美视频在线观看| 午夜久久久久久久久久一区二区| 麻豆成人91精品二区三区| 国产不卡在线视频| 91精品婷婷国产综合久久性色| 久久精品视频一区二区三区| 亚洲一区在线看| 亚洲成人一二三| 婷婷激情综合网| 国产成人免费av在线| 国产精品系列在线播放| 国产成人高清视频| 欧美日韩午夜在线视频| 678五月天丁香亚洲综合网| 国产精品国产三级国产普通话蜜臀 | 国产精品成人一区二区艾草| 日韩精品亚洲专区| 激情综合五月天| 色av成人天堂桃色av| 国产日韩av一区| 精品在线播放午夜| 欧美一区永久视频免费观看| 2022国产精品视频| 日韩国产一二三区| 国产老女人精品毛片久久| 欧美三级在线视频| 一区二区理论电影在线观看| 成人av电影在线播放| 国产欧美一区二区精品仙草咪| 日韩精品91亚洲二区在线观看| 99re8在线精品视频免费播放| 91同城在线观看| 欧美精品丝袜中出| 国产婷婷色一区二区三区 | 久久精品无码一区二区三区| 日韩成人dvd| 欧美一区二区成人| 美国毛片一区二区三区| 日韩欧美在线一区二区三区| 日本不卡高清视频| 91碰在线视频| 亚洲欧美精品午睡沙发| 毛片基地黄久久久久久天堂| 欧美肥妇free| 麻豆精品一二三| 久久青草欧美一区二区三区| 国产在线一区二区| 欧美人伦禁忌dvd放荡欲情| 夜夜揉揉日日人人青青一国产精品| 色综合天天视频在线观看| 一区二区三区在线视频观看| 在线精品观看国产| 日韩和欧美一区二区三区| 欧美丰满少妇xxxxx高潮对白| 美女国产一区二区| 国产精品私人影院| 精品在线观看免费| 欧美高清在线视频| 奇米亚洲午夜久久精品| 日韩午夜在线影院| 国产乱码字幕精品高清av| 欧美极品美女视频| 日本韩国欧美在线| 奇米一区二区三区av| 欧美国产激情二区三区| 色婷婷av一区二区三区软件| 午夜电影网一区| 久久久美女毛片 | 日韩成人午夜精品| 久久久久久久av麻豆果冻| 91视频一区二区三区| 日本亚洲三级在线| 国产精品视频看| 欧美人妇做爰xxxⅹ性高电影| 国产一区二区电影| 亚洲电影一级片| 国产亚洲污的网站| 91精品国模一区二区三区| 成人黄色777网| 日本不卡免费在线视频| 国产精品不卡一区二区三区| 欧美日韩极品在线观看一区| 国产成人啪免费观看软件| 婷婷夜色潮精品综合在线| 国产精品婷婷午夜在线观看| 日韩三级视频在线观看| 色综合久久中文综合久久97| 国产精品一区在线| 琪琪久久久久日韩精品| 国产精品久久久久久久蜜臀| 日韩一区二区三区三四区视频在线观看 | 伊人开心综合网| 国产欧美精品一区二区三区四区| 精品视频在线看| 色域天天综合网| 99国产精品久久| 国产精品69毛片高清亚洲| 从欧美一区二区三区| 91成人国产精品| eeuss鲁一区二区三区| 亚洲人成7777| 欧美韩国日本一区| 久久精品人人做人人爽人人| 日韩一区二区三区在线视频| 在线免费一区三区| 99精品久久久久久| 不卡视频一二三| 国产成人免费视频一区| 精品一区二区三区免费视频| 婷婷久久综合九色国产成人| 一区二区三区日韩在线观看| 亚洲色图欧美偷拍| 亚洲精品免费在线播放| 亚洲天堂av一区| 综合久久国产九一剧情麻豆| 国产欧美一区二区精品性色超碰| 久久新电视剧免费观看| 国产亚洲欧洲997久久综合| 久久一夜天堂av一区二区三区| 日韩午夜在线观看视频| 欧美成人性福生活免费看| 日韩丝袜美女视频| 精品国产乱码久久久久久老虎| 成人午夜大片免费观看| 成人性生交大片免费看中文 | 久久精品国产精品青草| 免费观看成人鲁鲁鲁鲁鲁视频| 免费成人深夜小野草| 国内成人自拍视频| 懂色av一区二区三区免费观看| 成人免费av网站| 在线日韩av片| 91精品国产综合久久久久久久久久| 国产精品国产三级国产aⅴ入口 | 国产亚洲欧洲一区高清在线观看| 久久久久久99久久久精品网站| 国产精品午夜久久| 亚洲午夜一区二区三区| 中文一区二区在线观看| 国产精品国产三级国产aⅴ入口| 亚洲女人小视频在线观看| 偷拍亚洲欧洲综合| 热久久国产精品| www.在线欧美| 欧美一区二区视频网站| 久久青草欧美一区二区三区| 亚洲欧美国产三级| 日本成人中文字幕在线视频| 久久99国产精品久久| 91女厕偷拍女厕偷拍高清| 日韩精品一区二区三区视频| 91丨porny丨国产入口| 制服丝袜中文字幕一区| 久久久久久久综合日本| 亚洲综合在线电影| 另类小说综合欧美亚洲| 91麻豆福利精品推荐| 欧美r级电影在线观看| 国产精品情趣视频| 亚洲成人免费在线| 国产美女一区二区| 91麻豆精品国产91久久久| 国产清纯白嫩初高生在线观看91 | 不卡大黄网站免费看| 欧美高清视频一二三区|