libxml2의 xmlCreatePushParserCtxt
을 사용하여 xmlParserCtxtPtr
을 만들고이 과정의 사용자 지정 xmlSAXHandler
에 대한 포인터를 전달했습니다.libxml2 C 라이브러리 : SAX 푸시 구문 컨텍스트 : null 종료 문자열이 전달 된 경우 xmlParseChunk 오류
그런 다음 XML 문서 파일 스트림에서 줄 끝 문자를 \0
null 종료 문자로 바꾸고 문자 버퍼로 한 줄을 읽습니다. 다음과 같이
이 chars
버퍼는 전달되는 :
xmlParseChunk(pParserCtxt, chars, numChars, 0);
numChars
이와 널 종료 문자를 포함하여 최대 버퍼의 시작부터 문자의 수입니다.
xmlParseChunk
기능은 다음 열거 에러 (47)를 반환된다는 것이다
: 이것은 문자 버퍼에 전달 된 모든 청크 발생
XML_ERR_PI_NOT_FINISHED
libxml2를 라이브러리의 문서로
<?xml version="1.0" encoding="UTF-8"?>
의 인라인 코멘트를 한, 나는 누군가를 스파 스 기대했다된다,하지만 난 파서 초기 널 (null)에서 오류 상태에 갇혀 그것을 처리하는 것이 문자열을 종료 믿는다 더 많은 경험 라이브러리에있는 nce가 내 오류를 지적 할 수 있습니까?
감사합니다.
@newllnhof를 찾아 주셔서 감사합니다. 이제는 유효한 XML 토큰 (즉, 요소 시작 태그, 요소 끝 태그, 빈 요소 태그 및 요소 텍스트)의 일부가 아닌 파일 스트림의 모든 문자를 제거하고 있습니다. 그러나 디버거에서'char *'버퍼가 올바르게 보이지만 (지정된 인덱스까지 예상 된 청크 만 포함) 파서가 오류 '73'('XML_ERR_GT_REQUIRED')을 던지고 있습니다. 내가 생각할 수있는 것은 UTF-8 인코딩이'getc'와 호환되지 않거나'libxml'이 지정된 크기 (정크 문자 포함)보다 많은 버퍼를 읽는 것입니다. – Jeff
이것은 버퍼에 포함 된 것입니다 : ' xml version = "1.0"encoding = "UTF-8"?> \ n \ n '문자가 예상되어 빠졌음을 나타냅니다. 그러나 38 번째 문자는'>'입니다. –
Jeff
파서가 'xmlParseChunk' 매개 변수에 설정된 38 자 한계를 초과하여 읽는 것으로 SAX 콜백 호출에서 알 수 있습니다. 'gameConfig'라는 이름의 요소에 대해 .startElement 콜백이 트리거되고 있습니다. 불완전한 토큰 (버퍼의 정크 문자 끝에)이 구문 분석 될 때 오류가 throw되어야합니다. – Jeff