现在的位置: 首页 > 综合 > 正文

libxml2笔记

2014年08月29日 ⁄ 综合 ⁄ 共 1161字 ⁄ 字号 评论关闭

最近用了一下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类型。

这个库功能太强大,快试试吧。

抱歉!评论已关闭.