最近用了一下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类型。
这个库功能太强大,快试试吧。