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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么样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库,一切就容易多了。

参考技术A 从网上down一个libxml2函数库,直接使用它来写应用程序就好了。
http://xmlsoft.org/sources/win32/ 这是windows下的库

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

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

以上是关于怎么样C语言解析一个XML文件中的信息,题目很详细,跪求高人指点。的主要内容,如果未能解决你的问题,请参考以下文章

怎么用c语言解析xml文件

C语言xml解析

c解析xml文件

在linux上用c语言进行xml解析

用C语言解析JSON数据

ply格式文件,用C语言怎么读入,并存储在哪种数据结构中