2013-02-24 1 views
0

XML 문서의 정보를 인쇄 할 때 각 줄 앞에 get이 표시됩니다. 내 XML 문서는 다음과 같습니다. 여기 화면이나 파일로 인쇄 할 때 Expat가 쓰레기를 출력합니다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 

이 그것을 밖으로 인쇄 무엇

#include <cstdio> 
#include <expat.h> 
#include <string> 
#include <fstream> 
#include <cstring> 
using namespace std; 
void XMLCALL start(void*,const char*, const char**); 
void XMLCALL end(void*,const char*); 
void XMLCALL character(void*, const char*, int); 
int main() 
{ 
    int size; 
    fstream fin("note.xml", ios::in | ios::binary | ios::ate); 
    size = fin.tellg(); 
    char* data = new char [size + 1]; 
    fin.seekg(0, ios::beg); 
    XML_Parser parser = XML_ParserCreate("ISO-8859-1"); 
    XML_SetElementHandler(parser, start, end); 
    XML_SetCharacterDataHandler(parser, character); 
    fin.read(data, size); 
    XML_Parse(parser, data, size , fin.eof()); 
    XML_ParserFree(parser); 
    fin.close(); 
    delete [] data; 
} 

void XMLCALL start(void* data, const char* name, const char** atts) 
{ 
    if((strcmp(name, "note")) == 0) 
    { 
     printf("-- Note --<br> "); 
    } 
    else if((strcmp(name,"to")) == 0) 
    { 
     printf("To: "); 
    } 
    else if((strcmp(name,"from")) == 0) 
    { 
     printf("From: "); 
    } 
    else if((strcmp(name,"heading")) == 0) 
    { 
     printf("Heading: "); 
    } 
    else if((strcmp(name, "body")) == 0) 
    { 
     printf("Message: "); 
    } 
} 

void XMLCALL end(void* data,const char* name) 
{ 
    printf("<br>"); 
} 

void XMLCALL character(void* data, const char* info, int length) 
{ 
    printf("%s",info); 
} 

내 코드입니다 :

-- Note --<br> 
To: Tove<br> 
From: Jani<br> 
Heading: Reminder<br> 
Message: Don't forget me this weekend!<br> 
<br> 

하나를 :

-- Note --<br> 
�To: Tove<br> 
xFrom: Jani<br> 
xHeading: Reminder<br> 
xMessage: Don't forget me this weekend!<br> 
x<br> 

이 내가 그것을 밖으로 인쇄 할 것입니다 도움을 크게 주시면 감사하겠습니다. 고마워요

+1

개행? 나는. ' "\ r \ n"'? –

+0

유니 코드 BOM 헤더가 가능합니다. 그런데 strncmp를 사용하여 문자열을 더 잘 사용해야합니다. 이 명령으로 많은 중요한 오류가 발생합니다. – rekire

+1

@rekire : 잠깐, 뭐라구? 그건 나에게 의미가 없다. 그것은 "mmap을 사용하지 마십시오. 위험하고 악합니다!" – thejh

답변

1

길이가 1 인 줄의 끝에 '\ n'이라는 문자가 호출됩니다. 다른 문자는 정보 문자열의 '\ n'다음에 쓰입니다.

+0

그래서 각 요소에 대해 문자를 호출해야합니까? – OshaMan

+0

좋아요. 고맙습니다. – OshaMan

+0

각 요소를 구문 분석하기 위해 문자열, getline() 및 while 루프를 사용했습니다. – OshaMan

관련 문제