【问题标题】:Best and efficient way to parse both XML and HTML in C在 C 中解析 XML 和 HTML 的最佳和有效方法
【发布时间】:2014-04-15 08:47:41
【问题描述】:

伙计们! 我正在寻找解析服务器响应 HTML 和 XML 内容的最佳和有效方法。响应来自我需要每 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”的网络搜索快速找到 libxml2 的文章/手册。你需要那些没有给你的东西?
  • 用 C 解析 HTML 响应就像用鲱鱼在森林里砍树。

标签: html c xml parsing


【解决方案1】:

libxml2 的代码示例是 here

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

但是,您的示例中没有任何内容表明您需要解析 HTML。您需要解析(我认为)HTTP 以处理标头(并从 HTTP 响应中检测 401 错误),然后解析 XML 内容。将 HTTP 标头解析到您需要的级别是微不足道的(只需 strtok 在换行符处分隔响应,第一行就有您需要的答案)。响应的正文在双换行符后开始(我认为您的第二个示例有粘贴错误)。这将您的任务减少为仅处理 HTTP 标头和 XML(无 HTML 解析)。

【讨论】:

  • 嗯.. 是的,它是 HTTP 而不是 HTML。我主要对 HTTP/1.0 之后的内容感兴趣,以便能够决定是继续解析 XML 部分还是抛出错误。我不需要使用任何外部库,只是因为我可以只使用 string.h 的东西来分析标头。但我仍然不知道如何解析那种类型的 XML。我尝试使用 xmlReadMemory、xmlDocGetRootElement 和 xmlNodeGetContent,但由于格式的原因有点运气。
猜你喜欢
  • 2011-05-03
  • 2011-04-06
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多