1

我有一个将 XML 数据发送到我的服务器程序的客户端程序。服务器需要解析 XML 数据。我在 Linux 上使用 C 语言。

是否有任何 API 可用于直接从套接字解析 XML?否则我怎么知道 XML 传输是否完成?

4

2 回答 2

3

正如我在上面试图解释的:当你使用“原始套接字”时,你一次最多只能读取一个缓冲区。您不一定会在一个套接字读取中读取整个文档;你甚至可能没有完整的线路。您需要在循环中一次将数据复制到缓冲区,直到获得所需的所有文本。这使解析复杂化:)

Expat 是一个面向流的解析器——这可能会有所帮助。

SAX 是一个“事件驱动”的解析器。您可以在 Expat 周围使用 SAX 包装器,也可以使用许多其他选择中的任何一种,包括 libXML 和 Xerces。

要点是 1)读取数据(从网络)和 2)解析数据是两个独立的活动

对于学习套接字,我强烈推荐 Beej 最优秀的“网络编程指南”:

对于学习外籍人士,这里有一个很好的教程:

'希望有帮助..

于 2012-09-29T06:19:01.913 回答
2

您不解析套接字上的数据。您read(2)recv(2)一些可以在读取或接收后解析或处理的数据(这些例程会发出 EOF 信号,例如通过读取 0 字节)。

C 存在几个 XML 解析库,请参阅此答案

特别是,其中许多(expat、libxml2、...)能够处理提取的数据块。具体来说,您为它们提供在某些 XML 事件(或当某些 XML 元素已被完全解析时)调用的例程,您为它们提供块读取例程,您安装并开始解析,最终您的一些 XML 事件或元素注册例程将叫做。

于 2012-09-29T06:17:28.153 回答