ОБСУЖДЕНИЕ

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

1 ответов 3,4 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
всем хай,
делаю простенький парсер 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++, с си++ второй день только знаком,был признателен за простое объяснение
 
проблема решена собственноручно, массив не опустошался перед считыванием новой строчки и записей её в массив,и в итоге,если предыдущая строка была длиннее последующие,строки накладывались,и последние символы оставались от более длинное строки) отсюда и непонятный вывод