1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

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

  1. elRay

    elRay Гость

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

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

    Код:
    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"); 
    
    } 
    
    } 
    
    
    }
    по идеи, как задумывалось, должен вывестись открывающий тэг ,пробел и закрывающий
    в итоге работает,но появляется непонятный мне тэг. Слеп,никак не могу увидеть в чём промах, но в результате


    Код:
    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>


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

    Код:
    CATALOG
    PLANT
    COMMON COMMON
    
    BOTANICAL BOTANICAL
    
    ZONE ZONE
    
    LIGHT LIGHT
    
    PRICE PRICE
    
    AVAILABILITY AVAILABILITY

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

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

    elRay Гость

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

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