/* * And now, the actual GSXMLRPC class. */@implementation	GSXMLRPC- (NSData*) buildMethod: (NSString*)method	         params: (NSArray*)params{  return [[self buildMethodCall: method params: params] dataUsingEncoding:    NSUTF8StringEncoding];}- (NSString*) buildMethodCall: (NSString*)method                       params: (NSArray*)params{  NSMutableString	*str = [NSMutableString stringWithCapacity: 1024];  unsigned		c = [params count];  unsigned		i;  if ([method length] == 0)    {      return nil;    }  else    {      static NSCharacterSet	*illegal = nil;      NSRange			r;      if (illegal == nil)	{	  NSMutableCharacterSet	*tmp = [NSMutableCharacterSet new];	  [tmp addCharactersInRange: NSMakeRange('0', 10)];	  [tmp addCharactersInRange: NSMakeRange('a', 26)];	  [tmp addCharactersInRange: NSMakeRange('A', 26)];	  [tmp addCharactersInString: @"_.:/"];	  [tmp invert];	  illegal = [tmp copy];	  RELEASE(tmp);	}      r = [method rangeOfCharacterFromSet: illegal];      if (r.length > 0)	{	  return nil;	// Bad method name.	}    }  [str appendString: @"<?xml version='"1.0'"?>'n"];  [str appendString: @"<methodCall>"];  NL;  INDENT(1);  [str appendFormat: @"<methodName>%@</methodName>",    [method stringByEscapingXML]];  NL;  if (c > 0)    {      INDENT(1);      [str appendString: @"<params>"];      NL;      for (i = 0; i < c; i++)      	{	  INDENT(2);	  [str appendString: @"<param>"];	  NL;	  INDENT(3);	  [str appendString: @"<value>"];	  NL;	  [[params objectAtIndex: i] appendToXMLRPC: str indent: 3 for: self];	  NL;	  INDENT(3);	  [str appendString: @"</value>"];	  NL;	  INDENT(2);	  [str appendString: @"</param>"];	  NL;	}      INDENT(1);      [str appendString: @"</params>"];      NL;    }  [str appendString: @"</methodCall>"];  NL;  return str;}

http://www.google.com/codesearch?hl=en&q=NSURLConnection+initWithRequest+show:thO0Gy4XKz8:WITO_lYqkRQ:OGAQEqv7aks&sa=N&cd=3&ct=rc&cs_p=ftp://ftp.gnustep.org/pub/daily-snapshots/core.current.tar.bz2&cs_f=core/base/Source/Additions/GSXML.m