проблема с парсингом Xml в ручную

Тема в разделе "Общие вопросы по С и С++", создана пользователем elRay, 10 май 2009.

  1. elRay

    elRay Гость

    Репутация:
    0
    всем хай,
    делаю простенький парсер xml файла для своих целей,но возникли некоторые трудности

    для начала пытаюсь сделать вывод древа тэгов хмл файла как он сам по себе устроен, <октрый тэг> </закрытый тэг>

    Код (Text):
    char row[1500];
    string tag;
    int a;
    int b;


    while (!feof(fp))
    {
    fgets(row, 255, fp);

    for (a=1;a<=255;a++)
    {

    //если открытый тэг первая скоба есть и нет бэкслэша после этого

    if (row[a]=='<' && row[a+1]!='/')
    {
    tag="";

    //извлекаю название тэга между позиция "<" есть, и пока не наткнусь на ">" записывать в tag

    for (b=a+1;b<=255;b++)
    {
    if (row[b]=='>') { break;}
    if (row[b]!='>') { tag+=row[b];}
    }

    printf("\n");
    printf(tag.c_str());
    printf(" ");

    }

    //если закрытый тэг первая скоба есть и есть бэкслэш после этого "<"

    if (row[a]=='<' && row[a+1]=='/')
    {
    tag="";

    //извлекаю название тэга между позиция "</f" есть, и пока не наткнусь на ">" записывать в tag

    for (b=a+2;b<=255;b++)
    {
    if (row[b]=='>') { break;}
    if (row[b]!='>') { tag+=row[b];}
    }
    printf(tag.c_str());
    printf("\n");

    }

    }


    }
    по идеи, как задумывалось, должен вывестись открывающий тэг ,пробел и закрывающий
    в итоге работает,но появляется непонятный мне тэг. Слеп,никак не могу увидеть в чём промах, но в результате


    Код (Text):
    CATALOG
    PLANT
    COMMON COMMON

    BOTANICAL BOTANICAL

    ZONE ZONE
    BOTANICAL  - откуда это???

    LIGHT LIGHT
    BOTANICAL  - и это?

    PRICE PRICE
    BOTANICAL    и это?

    AVAILABILITY AVAILABILITY
    ....
    и далее также наблюдается такое, часть как надо,а другая с эхом


    структура файла xml:

    <CATALOG>
    <PLANT>
    <COMMON>Bloodroot</COMMON>
    <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
    <ZONE>4</ZONE>
    <LIGHT>Mostly Shady</LIGHT>
    <PRICE>$2.44</PRICE>
    <AVAILABILITY>031599</AVAILABILITY>
    </PLANT>
    </CATALOG>


    задумывалось,чтобы вывелись тэги так:

    Код (Text):
    CATALOG
    PLANT
    COMMON COMMON

    BOTANICAL BOTANICAL

    ZONE ZONE

    LIGHT LIGHT

    PRICE PRICE

    AVAILABILITY AVAILABILITY

    Помогите с решение конкретной проблемы ,откуда этот лишний тэг взялся и почему?

    пишу в Dev-C++, с си++ второй день только знаком,был признателен за простое объяснение
     
  2. elRay

    elRay Гость

    Репутация:
    0
    проблема решена собственноручно, массив не опустошался перед считыванием новой строчки и записей её в массив,и в итоге,если предыдущая строка была длиннее последующие,строки накладывались,и последние символы оставались от более длинное строки) отсюда и непонятный вывод
     
Загрузка...

Поделиться этой страницей