标签:
越来越爱你linux杂谈 |
就我个人理解,
xml就是html的一个扩展, 相对的html是xml的一个子集.
现在很多的程序用xml写配置文件, 或者存放一些信息, 很方便,
有时候比ini格式用起来还要方便, 这是因为linux下面有库可以解xml格式的文件.
比如Fedora3上自带的libxml2库
现在很多的程序用xml写配置文件, 或者存放一些信息, 很方便,
有时候比ini格式用起来还要方便, 这是因为linux下面有库可以解xml格式的文件.
比如Fedora3上自带的libxml2库
下面是我学习xml的一个思路:
1. locate xml|grep lib|grep so 可以看到一些xml的解码库, 当然上网找更容易
2. 选定了libxml2.so, 然后用命令 rpm -qf /usr/lib/libxml2.so,
看它属于哪个rpm包, 结果是它属于libxml2-devel-2.6.14-2包
3. 然后再看看包里的其它内容, 比如帮助什么的, 用命令 rpm -qs libxml2-devel|more
于是就看到了一些html帮助文档, 和example用来试一试.
4. 再在网上找些例子, 就成了.
1. locate xml|grep lib|grep so 可以看到一些xml的解码库, 当然上网找更容易
2. 选定了libxml2.so, 然后用命令 rpm -qf /usr/lib/libxml2.so,
看它属于哪个rpm包, 结果是它属于libxml2-devel-2.6.14-2包
3. 然后再看看包里的其它内容, 比如帮助什么的, 用命令 rpm -qs libxml2-devel|more
于是就看到了一些html帮助文档, 和example用来试一试.
4. 再在网上找些例子, 就成了.
下面是两个小例子, 用以说明libxml的两种基本用法.
#include <stdio.h>
#include <libxml/xmlreader.h>
#include <libxml/tree.h>
#include <libxml/xmlreader.h>
#include <libxml/tree.h>
static void processNode(xmlTextReaderPtr reader) {
const
xmlChar *name, *value;
name =
xmlTextReaderConstName(reader);
if (name ==
NULL)
name = BAD_CAST "--";
value =
xmlTextReaderConstValue(reader);
}
streamFile(const char *filename) {
xmlTextReaderPtr reader;
int
ret;
}
int main(int argc, char **argv)
{
if (argc
< 2)
return;
{
}
编译方法:
g++ test1.c -o test1 `xml2-config --libs --cflags`
g++ test1.c -o test1 `xml2-config --libs --cflags`
这个例子我是用它example里的reader1.c改的, 简化了一些东西,
让它看起来更简单,
也加入了一些本地化的东东, 如: xmlReaderForFile(filename, "GB2312", 0);
如果不加这一句, xml文件被认为是UTF8编码的, 但是一般windows的编码都是GB2312,
GB18030什么的, 这样写来兼容性好一点儿
也加入了一些本地化的东东, 如: xmlReaderForFile(filename, "GB2312", 0);
如果不加这一句, xml文件被认为是UTF8编码的, 但是一般windows的编码都是GB2312,
GB18030什么的, 这样写来兼容性好一点儿
注意编译时要加`xml2-config --libs --cflags`,
否则找不着xml库
##############################################################
以上这种方式是按行解析, 更好的方法是按块解析,
我写了一个例子如下:
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/tree.h>
xmlDocPtr doc;
xmlNodePtr root;
xmlNodePtr root;
void parseNode(xmlNodePtr node)
{
xmlNodePtr
child = NULL;
{
}
bool loadXml(char *filename)
{
doc =
xmlParseFile(filename);
if (doc ==
NULL)
return
false;
{
}
int main(int argc, char **argv)
{
if (argc ==
1)
return
-1;
loadXml(argv[1]);
{
}
编译方法:
g++ test2.c -o test2 `xml2-config --libs --cflags`
g++ test2.c -o test2 `xml2-config --libs --cflags`
前一篇:工作中...忙里偷闲,瞎写写
后一篇:linux下arm交叉编译经验