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

前端之家收集整理的这篇文章主要介绍了一个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; //@H_404_187@定义解析文档指针

xmlNodePtrcurNode; //@H_404_187@定义结点指针
(@H_404_187@你需要它为了在各个结点间移动)
xmlChar*szKey; //@H_404_187@临时字符串变量

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

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

//@H_404_187@检查解析文档是否成功,如果不成功,
libxml@H_404_187@将指一个注册错误并停止。
//@H_404_187@一个常见错误是不适当的编码。
XML@H_404_187@标准文档除了用UTF-8@H_404_187@或UTF-16@H_404_187@外还可用其它编码保存。
//@H_404_187@如果文档是这样,
libxml@H_404_187@将自动地为你转换到UTF-8@H_404_187@。更多关于XML@H_404_187@编码信息包含在XML@H_404_187@标准中.
if (NULL == doc)
{
//@H_404_187@文档打开错误

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

/*@H_404_187@检查确认当前文档中包含内容
*/
if (NULL == curNode)
{
//@H_404_187@空得
xml@H_404_187@文件
xmlFreeDoc(doc);
return -2;
}
/*@H_404_187@在这个例子中,我们需要确认文档是正确的类型。“
root@H_404_187@”是在这个示例中使用文档的根类型。*/
if (xmlStrcmp(curNode->name,BAD_CAST "root"))
{
//@H_404_187@分析根元素失败

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

if((!xmlStrcmp(curNode->name,(const xmlChar *)"node2")))
{
szKey = xmlNodeGetContent(curNode);
cout << szKey << endl; //@H_404_187@得到
node2@H_404_187@的值并输出
xmlFree(szKey);
}
//@H_404_187@查找带有属性
attribute@H_404_187@的节点
if(xmlHasProp(curNode,BAD_CAST "b"))
{
propNodePtr = curNode;
}
curNode =curNode->next;
}
//@H_404_187@查找属性

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

猜你在找的XML相关文章