在C中解析XML和HTML的最佳有效方法



各位!我正在寻找解析服务器响应HTML和XML内容的最佳有效方法。响应来自我需要每5分钟轮询一次的服务器(目前列表中大约有5千个服务器,但很快就会翻倍(。响应作为平面文本存储在缓冲区中(从套接字获取(。所以,我需要解析HTML部分,如果成功(找到了强制性的东西(,我应该尝试解析XML部分,并获得要存储在DB中的统计信息。回复如下:

HTTP/1.0 200 OK
Connection: close
Content-Length: 682
Content-Type: text/xml; charset=utf-8
Date: Sun, 09 Mar 2014 15:44:52 GMT
Last-Modified: Sun, 09 Mar 2014 15:44:52 GMT
Server: DrWebAV-DeskServer/REL-610-AV-6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.0e
<?xml version="1.0" encoding="utf-8"?><avdesk-xml-api API='2.1.0' API_BUILD='20130709' branch='REL-610-AV' oper='get-server-info' rc='true' timestamp='20140309154452987' version='6.02.0.201311040'><server><id>00c1d140-d21d-b211-a828-b62919c4250d</id><platform>Linux 2.6.39-gentoo-r3 x86_64 (4 SMP Mon Oct 24 11:04:40 YEKT 2011)</platform><version>6.02.0.201311040</version><statistics from='20140301000000000' till='20140309235959999'><noviruses/><stations total='101'><online>5</online><deinstalled>21</deinstalled><blocked>0</blocked><expired>81</expired><offline>96</offline><activated>74</activated><unactivated>27</unactivated></stations></statistics></server></avdesk-xml-api>

可能是smth。像这个

HTTP/1.0 401 Authorization Required
Cache-Control: post-check=0, pre-check=0
Connection: close
Content-Length: 421
Content-Type: text/html; charset=utf-8
Date: Sun, 09 Mar 2014 15:44:22 GMT
Expires: Date: Sat, 27 Nov 2004 10:18:15 GMT
Last-Modified: Date: Sat, 27 Nov 2004 10:18:15 GMT
Pragma: no-cahe
Server: DrWebAV-DeskServer/REL-610-AV-6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.1
WWW-Authenticate: Basic realm="Dr.Web XML API area"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><TITLE>Unauthorized</TITLE><BODY><STRONG>Unauthorized</STRONG><P>The error "401 Unauthorized" occured while processing request you had sent.<P><BR><BR><I>Access denied or your browser does not support HTTP authentication!</I><BR><P><BR><BR><HR><P>Dr.Web &reg; AV-Desk Server REL-610-AV 6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.1</BODY></HTML>

关于HTML部分,我基本上对HTTP/1.0 STRING和Server:STRING之类的东西感兴趣,如果授权成功,则需要对每个标记进行XML解析。我发现,libxml2适合解析HTML/XML这两种内容,但找不到任何实际的使用示例,只有一些主要的接口描述。所以,需要帮助。

此处为libxml2的代码示例

邮件列表友好,代码成熟且质量良好。

但是,您的示例中没有任何内容表明您需要解析HTML。您需要解析(我认为(HTTP来处理标头(并从HTTP响应中检测401错误(,然后解析XML内容。将HTTP头解析到您需要的级别是很简单的(只需strtok,分隔在换行符上的响应,第一行就有您需要的答案(。响应的主体在换行后开始(我认为您的第二个示例有粘贴错误(。这将使您的任务简化为简单地处理HTTP标头和XML(无需HTML解析(。

最新更新