• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы elRay
  • Дата начала
E

elRay

всем хай,
делаю простенький парсер 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++, с си++ второй день только знаком,был признателен за простое объяснение
 
E

elRay

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!