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

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

  1. elRay

    elRay Гость

    всем хай,
    делаю простенький парсер 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 Гость

    проблема решена собственноручно, массив не опустошался перед считыванием новой строчки и записей её в массив,и в итоге,если предыдущая строка была длиннее последующие,строки накладывались,и последние символы оставались от более длинное строки) отсюда и непонятный вывод
     
Загрузка...
Похожие Темы - проблема парсингом Xml
  1. AgniXRudra
    Ответов:
    2
    Просмотров:
    54
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    31
  3. c0de3r
    Ответов:
    5
    Просмотров:
    155
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    160
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    145

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