场景:
1.有时候需要读取其他的xml片段输出组合成一个完整的xml文档.
2.或者对内存xml进行修改.
void ReadXmlFromMemory()
{
string source =
"<margin left=\"19\"><font size=\"10\" type=\"Courier\"> 1984 By George Orwell</font></margin>";
string dest;
xmlTextReaderPtr reader = xmlReaderForMemory(source.c_str(), source.size(),
NULL, NULL, 0);
int ret = xmlTextReaderRead(reader);
while (ret == 1)
{
xmlNodePtr node = xmlTextReaderCurrentNode(reader);
if (!xmlStrcmp(node->name, BAD_CAST "margin"))
{
xmlChar* left_attr = xmlGetProp(node, BAD_CAST "left");
cout << "left: " << (char*) left_attr << endl;
xmlFree(left_attr);
}
cout << "node name is: " << node->name << endl;
if (!xmlStrcmp(node->name, BAD_CAST "font"))
{
xmlChar* size_attr = xmlGetProp(node, BAD_CAST "size");
cout << "size_attr: " << (char*) size_attr << endl;
xmlFree(size_attr);
xmlChar* type_attr = xmlGetProp(node, BAD_CAST "type");
cout << "type_attr: " << (char*) type_attr << endl;
xmlFree(type_attr);
}
if (!xmlStrcmp(node->name, BAD_CAST "text"))
{
cout << "node content is: " << node->content << endl;
dest.append((char*) node->content);
break;
}
ret = xmlTextReaderRead(reader);
cout << "loop" << endl;
}
cout << "bytes readed: " << xmlTextReaderByteConsumed(reader) << endl;
xmlFreeTextReader(reader);
cout << "dest: " << dest << endl;
//初始化和释放暂时不用管
// xmlInitParser();
//xmlCleanupParser();
//xmlMemoryDump();
}
本文介绍了一种从内存中读取XML字符串并利用libxml2库进行解析的方法。通过示例代码展示了如何逐个节点地遍历XML文档、获取属性及节点内容,并将所需信息输出。
3232

被折叠的 条评论
为什么被折叠?



