[libxml]如何提取属性值

用作例子的xml文件内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<config>
<Attributes>
<avp name="SessionNum" code="200" encrypt="false"/>
</Attributes>
</config>


源码:

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

#include <libxml2/libxml/parser.h>
#include <libxml2/libxml/tree.h>
#include <libxml2/libxml/xmlmemory.h>

int main(void)
{
xmlDocPtr  doc = NULL;
xmlNodePtr proot = NULL,pfirst = NULL,psecond = NULL;
xmlChar *value = NULL;

xmlKeepBlanksDefault(0);//必须加上,防止程序吧元素前后的空白文本符号当作一个node
doc = xmlReadFile("test.xml","UTF-8",XML_PARSE_RECOVER);//libxml只能解析UTF-8格式数据
if (doc == NULL)
{
printf("error:can't open file!\n");
return ERROR;
}

proot = xmlDocGetRootElement(doc);
if (proot == NULL)
{
printf("error:file is empty!\n");
return ERROR;
}
pfirst = proot->children;


while(pfirst != NULL)
{
if(!xmlStrcmp(pfirst->name,BAD_CAST("Attributes")))
{
psecond = pfirst->children;
while(psecond != NULL)
{
if (!xmlStrcmp(psecond->name,BAD_CAST("avp")))
{
if ((value = xmlGetProp(psecond,BAD_CAST("name"))))
{
printf("name:%s\n",(char *)value);
xmlFree(value);
}
if ((value = xmlGetProp(psecond,BAD_CAST("code"))))
{
printf("code:%s\n",(char *)value);
xmlFree(value);
}
if ((value = xmlGetProp(psecond,BAD_CAST("encrypt"))))
{
printf("encrypt:%s\n",value);
xmlFree(value);
}
psecond = psecond->children;
}
}
}
pfirst = pfirst->next;
}
xmlFreeDoc(doc);
xmlCleanupParser();
xmlMemoryDump();

return OK;
}


测试结果:

name:SessionNum
code:200
encrypt:false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值