2014-12-19 2 views
0

expat 라이브러리로 일부 XMPP를 구문 분석하려고합니다. 내가 좋아하는 입력 파일이 있습니다expat 라이브러리에서 "형식이 올바르지 않습니다 (잘못된 토큰)"오류가 발생했습니다.

<iq from='ya.ru' to='[email protected]/Foo1256' id='ping_1' type='get'><ping xmlns='urn:xmpp:ping'/></iq> 

을하지만 오류가 "아니 잘 형성 (유효하지 않은 토큰)"나는 XML_Parse() 사용할 때마다이있다. exat가 "from = ...."또는 "iq"태그의 다른 속성을 구문 분석하려고 할 때 오류가 발생한다는 것을 알았습니다. 예를 들어 다음 문자열은 오류없이 구문 분석됩니다.

<iq><ping xmlns='urn:xmpp:ping'/></iq> 

왜?

파서는 XML_ParserCreateNS(NULL, '|');으로 생성됩니다.

이 구문 분석 기능 :

bool CSessionTreeItem::setXMLForParser(char *buf, int Len, AnsiString &Error) 
{ 
    bool error = false; 
    for(int i = 0; i < Len; i ++) 
     { 
      if(i + 5 < Len) 
       { 
        if(memcmp(buf + i, "<?xml", 5) == 0) 
        { 
          XML_ParserReset(parser, NULL); 
          InitHandlers(); 
        } 
       } 
       if (!XML_Parse (parser, buf + i, 1, 0)) 
       { 
         Error = AnsiString(XML_ErrorString (XML_GetErrorCode (parser))); 
         error = true; 
         break; 
       } 
       if(endCompressTag) 
       { 
        endCompressTag = false; 
        if(i + 1 < Len) 
        { 
         if(write(buf + i + 1, Len - (i + 2), Error) != 0) 
         { 
          error = true; 
          break; 
         } 
        } 
        break; 
       } 
     } 
     return (!error); 
} 
  • C++ 빌더 2.1.0 국외 거주자 를 사용하여 내 경우 6
  • 국외 거주자 2.0.1
+0

속성 값을 큰 따옴표로 묶으려고 시도했습니다 :'from = "ya.ru"'? –

+0

예. 계속 오류가 발생합니다. –

답변

0

문제를 해결했다.

관련 문제