3
A
回答
9
使用libxml2 HTML解析器,它會將「髒」HTML標準化爲標準化樹。 看到htmlDocPtr htmlParseFile(const char * filename, const char * encoding)
4
我遇到這麼多麻煩,由於缺乏知識。所以我寫了整個演示程序來使用libxml2庫解析HTML。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/HTMLparser.h>
void traverse_dom_trees(xmlNode * a_node)
{
xmlNode *cur_node = NULL;
if(NULL == a_node)
{
//printf("Invalid argument a_node %p\n", a_node);
return;
}
for (cur_node = a_node; cur_node; cur_node = cur_node->next)
{
if (cur_node->type == XML_ELEMENT_NODE)
{
/* Check for if current node should be exclude or not */
printf("Node type: Text, name: %s\n", cur_node->name);
}
else if(cur_node->type == XML_TEXT_NODE)
{
/* Process here text node, It is available in cpStr :TODO: */
printf("node type: Text, node content: %s, content length %d\n", (char *)cur_node->content, strlen((char *)cur_node->content));
}
traverse_dom_trees(cur_node->children);
}
}
int main(int argc, char **argv)
{
htmlDocPtr doc;
xmlNode *roo_element = NULL;
if (argc != 2)
{
printf("\nInvalid argument\n");
return(1);
}
/* Macro to check API for match with the DLL we are using */
LIBXML_TEST_VERSION
doc = htmlReadFile(argv[1], NULL, HTML_PARSE_NOBLANKS | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING | HTML_PARSE_NONET);
if (doc == NULL)
{
fprintf(stderr, "Document not parsed successfully.\n");
return 0;
}
roo_element = xmlDocGetRootElement(doc);
if (roo_element == NULL)
{
fprintf(stderr, "empty document\n");
xmlFreeDoc(doc);
return 0;
}
printf("Root Node is %s\n", roo_element->name);
traverse_dom_trees(roo_element);
xmlFreeDoc(doc); // free document
xmlCleanupParser(); // Free globals
return 0;
}
+0
我也想告訴用戶我用的是libxml2-2.7.8.win32。 – 2016-08-08 09:06:05
相關問題
- 1. 如何使用libxml2編寫CDATA節點?
- 2. 如何使用libxml2的目標C
- 3. 如何使用C編程
- 4. 使用libxml2在C中調用Webservice
- 5. 使用的libxml2
- 6. 如何使用libxml2以C編程語言使用模式文件驗證xml文件
- 7. 如何使用libxml2生成XML文件?
- 8. 在Netbeans中使用C++中的libXml2
- 9. 錯誤在C++中使用的libxml2
- 10. C++在UNIX解析使用的libxml2
- 11. 如何使用libxml2獲取內容?
- 12. 如何編程方式使用C#
- 13. 如何使用pngwriter編譯C++程序
- 14. 如何使用C++編程arduino
- 15. 如何使用C編程TI TMS320C674x實時時鐘使用C
- 16. 如何使用C++靜態庫編譯C#應用程序?
- 17. 如何使用C#應用程序編譯C++代碼
- 18. 如何僅使用C語言編程使用GCC編譯Allegro 5程序
- 19. 在C++中的libxml2,如何設置編碼
- 20. 使用libxml2創建xmlDoc
- 21. 的XPath使用的libxml2
- 22. 在android中使用libxml2
- 23. libxml2的使用爲iPad
- 24. 使用libxml2而不使用zlib
- 25. 使用C編程的Makefiles
- 26. C編程?使用指針
- 27. Asterisk Agi使用C#編程?
- 28. 使用ISDIGIT C編程
- 29. 編程方式使用C#
- 30. 使用C編程錯誤
哦〜它是有用的。非常感謝,^ _^ – 2012-03-19 07:24:36
^^^ upvote按鈕就在那裏;) – 2012-03-19 07:25:10