一个xml的问题我发现开始搞的人碰到这个问题的也挺多

下载libxml2:

官方网站,下载适合自己版本的源码包。

http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-devel

我下载的是:

libxml2-devel-2.9.1-5.1.i586.rpm

用命令解压:

rpm2cpio libxml2-devel-2.9.1-5.1.i586.rpm |cpio –div

这条命令太神了,之后没有用make该有的就都有了。

liuguili@ubuntu:~/libxml$ rpm2cpiolibxml2-devel-2.9.1-5.1.i586.rpm | cpio -div

liuguili@ubuntu:~/libxml$

liuguili@ubuntu:~/libxml$ cd usr

liuguili@ubuntu:~/libxml/usr$ ls

bininclude lib share

liuguili@ubuntu:~/libxml/usr$

后来胡乱在网上找了一段源码,想编译下试试,结果报头文件找不到。

In file included from test1.c:2:0:

libxml/parser.h:15:31: Fatal error:libxml/xmlversion.h: No such file or directory

compilation terminated.

我以为是安装有问题,又装了一遍:

sudoapt-get installlibxml2-dev libxslt1-dev

还是不成,毛关系没有。

省略一万字,反正我研究了两个小时~~

后来发现加两个编译选项就好了~~

liuguili@ubuntu:~/xmltest/usr/include$ g++test1.c -I/home/liuguili/xmltest/usr/include/libxml2/ -L/home/liuguili/xmltest/usr/lib -lxml2 -o testxml

liuguili@ubuntu:~/xmltest/usr/include$ ./testxml

bbbbb

20

谢谢热情的大神~~

附上在网上找的一段源码

#include <iostream>
#include <libxml/parser.h>
int main(int argc,char *argv[])
{
xmlDocPtrdoc; //定义解析文档指针

xmlNodePtrcurNode; //定义结点指针(你需要它为了在各个结点间移动)

xmlChar*szKey; //临时字符串变量

char szDocName[] ="d.xml";
using std::string;
using std::cout;
using std::endl;

doc =xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件

//检查解析文档是否成功,如果不成功,libxml将指一个注册错误并停止。

//一个常见错误是不适当的编码。XML标准文档除了用UTF-8UTF-16外还可用其它编码保存。

//如果文档是这样,libxml自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.

if (NULL == doc)
{
//文档打开错误

return -1;
}
curNode =xmlDocgetRootElement(doc); //确定文档根元素

/*检查确认当前文档中包含内容*/

if (NULL == curNode)
{
//空得xml文件

xmlFreeDoc(doc);
return -2;
}
/*在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。*/

if (xmlStrcmp(curNode->name,BAD_CAST "root"))
{
//分析根元素失败

xmlFreeDoc(doc);
return -3;
}
curNode =curNode->xmlChildrenNode;
xmlNodePtr propNodePtr =curNode;
while(curNode != NULL)
{
//取出节点中的内容

if((!xmlStrcmp(curNode->name,(const xmlChar *)"node2")))
{
szKey = xmlNodeGetContent(curNode);
cout << szKey << endl; //得到node2的值并输出

xmlFree(szKey);
}
//查找带有属性attribute的节点

if(xmlHasProp(curNode,BAD_CAST "b"))
{
propNodePtr = curNode;
}
curNode =curNode->next;
}
//查找属性

xmlAttrPtr attrPtr =propNodePtr->properties;
while (attrPtr != NULL)
{
if(!xmlStrcmp(attrPtr->name,BAD_CAST "b"))
{
xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "b");
cout << szAttr << endl; //找到b属性输出

xmlFree(szAttr);
}
attrPtr =attrPtr->next;
}
xmlFreeDoc(doc);
return 0;
}

本文要读取的d.xml
<?xml version="1.0"encoding="UTF-8" ?>
<root>
<node1 a="10">aaaaa</node1>
<node2 b="20">bbbbb</node2>

</root>

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念