2010-08-20 3 views
1

저는 MiniXML 라이브러리를 사용하여 C에서 XML 파일을 구문 분석하지만 노드 값을 읽으려고하면 NULL을 반환합니다.MiniXML을 사용하여 C로 XML 파일 구문 분석

FILE *fp; 
mxml_node_t *tree; 

fp = fopen("test.xml", "r"); 
tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK); 
fclose(fp); 

mxml_node_t *node; 
for(node = mxmlFindElement(tree, tree,"node",NULL, NULL,MXML_DESCEND); 
    node != NULL; 
    node = mxmlFindElement(node, tree,"node",NULL, NULL, MXML_DESCEND)) { 
    printf("Text: %s\n", node->value.text.string); 
} 

문제는 노드 -> value.text.string가 NULL이다 :

여기에 코드입니다. 나는 문서를 읽고 있었고 무엇이 잘못되었는지 알지 못합니다. 누구든지 전에이 문제에 부딪 혔습니까?

답변

2

변경해보십시오 당신을위한 루프 지정합니다 :

node->value.text.string 

가 그 일을 수행하는 대신

node->child->value.text.string 

를? 그것은 단지 추측이지만, "노드"요소에 대한 데이터를 얻는 것이 필요할 수도 있습니다.

그래도 작동하지 않으면 C++: Trouble loading long string from XML file using Mini-XML을 확인하십시오. 이 사람은 문제를 해결하기 위해 MXML_DESCEND 대신 MXML_DESCEND_FIRST를 사용해야한다고 말합니다. 나는 그것이 당신의 경우에 도움이 될지 모르겠습니다.

이 둘 모두가 작동하지 않으면 입력 XML을 게시하여 문제를 재현 할 수 있습니다.

1

동일한 오류가 발생했습니다. 게시 한 링크를 가져 주셔서 감사합니다. node-> child-> value.opaque에서 node-> child-> value.text.string을 변경하여 오류를 수정할 수 있습니다. type_cb 함수가 올바른 대/소문자를 선택하기 때문에 파일을 열 때 변경할 사항이 없습니다.

0

Minixml 버그 502 - minixml mxmlLoad *() 함수가 MXML_TEXT_CALLBACK으로 텍스트를로드하지 못합니다. 해결하려면 사용자 고유의 텍스트 콜백을 정의하고 사용하십시오.