2013-04-23 17 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來解析下這個XML:http://schemas.dmtf.org/ovf/envelope/1/dsp8023_1.0.xsd瞭解XML

輸出:

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

爲什麼有這麼多的文本節點?文本節點如何排列在DOM內部?我明白dom內部的任何東西都是節點,文本節點用於存儲元素的文本內容。但是,這個輸出對我來說沒有意義。任何有用的見解?謝謝。

回答

0

<import/>元素末尾的每個換行符和縮進都必須表示爲文本節點。

+0

謝謝。這真的有幫助。 – FaceBro 2013-04-23 03:59:39