2013-04-23 2 views
0
#include <stdio.h> 
20 #include <stdlib.h> 
21 #include <string.h> 
22 #include <libxml/tree.h> 
23 #include <libxml/parser.h> 
24 
25 
26 
27 xmlNodePtr get_child_element_by_name(const xmlNodePtr parent_element, const xmlChar* child_name); 
28 
29 int main(int argc, const char *argv[]) 
30 { 
31 const char * xmlPath=argv[1];· 
32 xmlDocPtr xmldp=xmlParseFile(xmlPath); 
33 if (!xmldp) 
34  return 1; 
35 
36 printf("Target xml file: %s\n",xmldp->URL); 
37 
38 xmlNodePtr root_element=xmlDocGetRootElement(xmldp); 
39 
40 xmlNodePtr tmp=get_child_element_by_name(root_element,"Referenc"); 
41 
42 if (tmp) 
43  printf("found %s\n",tmp->name); 
44 
45 
46 return 0; 
47 } 
48 
49 xmlNodePtr get_child_element_by_name(const xmlNodePtr parent_element, const xmlChar* child_name){ 
50 if (parent_element == NULL) 
51  return NULL; 
52 
53 xmlNodePtr child_ele = parent_element->children; 
54 xmlNodePtr last_ele = parent_element->last; 
55 
56 for (; child_ele; child_ele=child_ele->next){ 
57  printf("Current child:%s\n",child_ele->name); 
58 
59  if (0 == strcmp(child_name, child_ele->name)) 
60   return child_ele; 
61 } 
62 return NULL; 
63 } 

사용이 코드에서 DOM을 이해 : http://schemas.dmtf.org/ovf/envelope/1/dsp8023_1.0.xsd는 다음이 XML을 구문 분석 XML

출력 :

Current child:text 
Current child:import 
Current child:text 
Current child:import 
Current child:text 
.... 

왜 이렇게 많은 텍스트 노드? 텍스트 노드는 DOM 내부에 어떻게 배치됩니까? DOM 내부의 모든 것은 노드이고 텍스트 노드는 요소의 텍스트 내용을 저장하는 데 사용된다는 것을 알고 있습니다. 그러나,이 출력은 나를 위해 이해가되지 않습니다. 유용한 통계가 있습니까? 감사.

답변

0

<import/> 요소의 끝에 오는 모든 개행과 들여 쓰기는 텍스트 노드로 표시되어야합니다.

+0

감사합니다. 이것은 정말로 도움이됩니다. – FaceBro