最近用了一下libxml2这个xml解析库,功能太强大了。
这儿有一个文章介绍得不错:http://blog.csdn.net/armman/article/details/1739281
1. add exist xml to a big xml as children.
我用的时候主要是想把一个xml文件加入到另一个xml中做sub xml. 也就需要用到xmlAddChild()这个方法。 那么如何把xml文件转化为xmlNodePtr呢?首先把xml在内存中构建起来,然后得到root node,这样就得到xmlNodePtr了,代码如下:
xmlDocPtr subdoc; subdoc = xmlParseDoc([self.ContentArea xmlString]); xmlNodePtr xmlContent = xmlDocGetRootElement(subdoc); xmlAddChild(nameNode, xmlContent);
其中xmlString是NSString的一个category方法, self.ContentArea返回NSString *类型, nameNode是xmlNodePtr类型,就是你要加入的node的father node.
- (const xmlChar *)xmlString { return (xmlChar *)[self UTF8String]; }
2. get descendants of one node and parse to string
NSString *str = nil; if (xmlNode_ != NULL) { xmlBufferPtr buff = xmlBufferCreate(); if (buff) { xmlDocPtr doc = NULL; int level = 0; int format = 0; int result = xmlNodeDump(buff, doc, xmlNode_, level, format); if (result > -1) { str = [[[NSString alloc] initWithBytes:(xmlBufferContent(buff)) length:(xmlBufferLength(buff)) encoding:NSUTF8StringEncoding] autorelease]; } xmlBufferFree(buff); } } // remove leading and trailing whitespace NSCharacterSet *ws = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *trimmed = [str stringByTrimmingCharactersInSet:ws];
其中xmlNode_是xmlNodePtr类型。
这个库功能太强大,快试试吧。