C中的libxml HTML解析错误

时间:2014-02-11 19:06:22

标签: c html-parsing libxml2

这是我尝试用libxml解析的HTML文件

<html>
<head>
         <title>Hello World Page</title>
         <link rel="stylesheet" type="text/css" href="http://csszengarden.com/214/214.css?v=8may2013">
</head>
<body>
    <h3>Hello World</h3>
    <br>
    <p>Questo e un paragrafo.</p>
    <a src="/">LINK</a>
</body>
</html>

这是我从libxml解析教程中获取的示例程序。

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

static void print_element_names(xmlNode * a_node);

int main()
{
  xmlDoc         *doc = NULL;
  xmlNode        *root_element = NULL;
  const char     *Filename = "file.xml";
  doc = xmlReadFile(Filename, NULL, 0);

  if (doc == NULL) printf("error: could not parse file %s\n", Filename);
  else
  { root_element = xmlDocGetRootElement(doc);
    print_element_names(root_element);
    xmlFreeDoc(doc); }
  xmlCleanupParser();
  return (0);
}

static void print_element_names(xmlNode * a_node)
{
  xmlNode *cur_node = NULL;
  for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
      if (cur_node->type == XML_ELEMENT_NODE)
          printf("node type: Element, name: %s\n", cur_node->name);
      print_element_names(cur_node->children);
  }
}

给我回复这一系列错误

file.xml:5: parser error : Opening and ending tag mismatch: link line 4 and head
    </head>
           ^
file.xml:11: parser error : Opening and ending tag mismatch: br line 8 and body
    </body>
           ^
file.xml:12: parser error : Opening and ending tag mismatch: body line 6 and html
</html>
       ^
file.xml:12: parser error : Premature end of data in tag head line 2
</html>
       ^
file.xml:12: parser error : Premature end of data in tag html line 1
</html>
       ^
error: could not parse file file.xml

我是libxml的菜鸟,我会根据HTML文件从树中生成和提取数据。我需要在程序中修改什么来解析HTML代码?

1 个答案:

答案 0 :(得分:1)

xmlReadFile解析XML文件。您有一个HTML文件,而不是XML文件。要解析HTML文件,请使用htmlReadFile代替 [1]


  1. documentation中的错误称它尽管解析了XML。