怎么样C语言解析一个XML文件中的信息,题目很详细,跪求高人指点。

这个是XML文件的链接
http://maps.google.com/maps/api/geocode/xml?address=shenzhen&sensor=false

我需要一个C语言的函数(一定是要C因为是做嵌入式系统的),目的是获取这个XML文件中第一个出现<lat>和第一个出现<lng>后面的这两个浮点数,比如说<lat>22.5430990</lat>
<lng>114.0578680</lng>
那我就是要获取到22.5430990和114.0578680。

求怎么用C语言来实现这个目的,这里有个要求,因为我做这个函数的目的是通过输入地名来获取经纬度,所以不能把直接复制保存这个XML文件,一定是要用这个动态的链接http://maps.google.com/maps/api/geocode/xml?address=shenzhen&sensor=false
(address=shenzhen 可以换成别的城市来获取不同的经纬度。)

谢谢各位!
请大家给一个详细的函数啊,正确无误的。。OK的追加分数奉上!

  这个要求不需要作XML的解析,用字符串搜索功能就足够了,把网页内容读出之中按字符串搜索就可以找到<lat>和<lng>。
  比如让指针 char * page 指向读取得到的网页内容,就可以这样得到经度lat和纬度lng:

#include <string.h>
#include <stdio.h>

double lat, lng;
char * str_lat, *str_lng;

str_lat = strstr(page, "<lat>"); /*搜索字符串<lat>的位置*/
sscanf(str_lat+5, "%lf", &lat); /*从搜索到的位置之后读取一个浮点数作为纬度lat*/

str_lng = strstr(page, "<lng>");
sscanf(str_lng+5, "%lf", &lng); /*类似地,读出经度lng*/追问

读链接的XML文件直接用fopen吗,其实我最难理解的是不知道就只用这个链接域名,能不能解析的到。

追答

  这是不行的,fopen只能读取本地文件,C语言的标准库函数都没有读取网络文件的功能。
  不管在哪一种操作系统平台上,这都要用到平台对网络功能的支持。
  即使用C语言读取网络端口,也得操作系统平台支持访问网络才行,比如至少得有网络接口设备。但操作这些设备,就不是标准C语言考虑的范围了,必须要调用系统平台的相关功能。
  要想比较容易地实现这项功能,可以试试curl库,这是一个在C语言中使用HTTP协议的跨平台库,而且使用也很方便。只要楼主的嵌入式系统支持curl库,一切就容易多了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-31
从网上down一个libxml2函数库,直接使用它来写应用程序就好了。
http://xmlsoft.org/sources/win32/ 这是windows下的库

ftp://xmlsoft.org/libxml2/ 这是linux下的

官网上还有其它系统下的版本,自己研究一下吧。
第2个回答  2012-10-31
说下自己想法:既然有文件了,那么fopen之类的函数打开然后遍历文件寻找<lat>,<lng>找到第一个了就读取float大小的字节。
相似回答