Aggiungere quanto segue a GDataXMLNode.h
+ (GDataXMLElement *)elementWithName:(NSString *)name cDataStringValue:(NSString *)value;
- (void)setCDataStringValue:(NSString *)value;
Aggiungere il seguente alla GDataXMLNode.m
+ (GDataXMLElement *)elementWithName:(NSString *)name cDataStringValue:(NSString *)value {
xmlNodePtr theNewNode = xmlNewNode(NULL, // namespace
GDataGetXMLString(name));
if (theNewNode) {
NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
xmlNodePtr textNode = xmlNewCDataBlock(theNewNode->doc, GDataGetXMLString(value), length);
if (textNode) {
xmlNodePtr temp = xmlAddChild(theNewNode, textNode);
if (temp) {
// succeeded
return [self nodeConsumingXMLNode:theNewNode];
}
}
// failed; free the node and any children
xmlFreeNode(theNewNode);
}
return nil;
}
- (void)setCDataStringValue:(NSString *)value {
if (xmlNode_ != NULL && value != nil) {
NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
xmlNodePtr textNode = xmlNewCDataBlock(xmlNode_->doc, GDataGetXMLString(value), length);
if (textNode) {
xmlAddChild(xmlNode_, textNode);
}
}
}
Non è necessario il metodo setCDataStringValue per questo esempio, ma ho incluso lo stesso, in modo da poter eventualmente creare il GDataXMLNode e aggiungere il DatiC tardi.
tuo esempio potrebbe quindi diventare:
GDataXMLElement * body = [GDataXMLNode elementWithName:@"body"];
GDataXMLElement * response = [GDataXMLNode elementWithName:@"response" cDataStringValue:@"<hello>"];
[body addChild:response];
NSLog(@"%@",[body XMLString]);
quali uscite:
<body><response><![CDATA[<hello>]]></response></body>
mai trovare fuori? Mi piacerebbe saperlo anche io. – ransomweaver
Inoltre, il CDATA viene eliminato completamente: GDataXMLElement * n = [[GDataXMLElement alloc] initWithXMLString: @ " " errore: nil]; –
ransomweaver
quindi ottieni mystring –
ransomweaver