Ajoutez les éléments suivants à GDataXMLNode.h
+ (GDataXMLElement *)elementWithName:(NSString *)name cDataStringValue:(NSString *)value;
- (void)setCDataStringValue:(NSString *)value;
Ajouter ce qui suit à 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);
}
}
}
Vous n'avez pas besoin de la méthode setCDataStringValue pour cet exemple, mais je les inclus de toute façon, de sorte que vous pouvez éventuellement créer le GDataXMLNode et ajouter plus tard CData.
Votre exemple deviendrait alors:
GDataXMLElement * body = [GDataXMLNode elementWithName:@"body"];
GDataXMLElement * response = [GDataXMLNode elementWithName:@"response" cDataStringValue:@"<hello>"];
[body addChild:response];
NSLog(@"%@",[body XMLString]);
qui délivre en sortie:
<body><response><![CDATA[<hello>]]></response></body>
trouver jamais sortir? J'aimerais savoir aussi. – ransomweaver
En outre, cela se traduit par l'élimination complète du CDATA: GDataXMLElement * n = [[GDataXMLElement alloc] initWithXMLString: @ " " erreur: nil]; –
ransomweaver
alors vous obtenez mystring –
ransomweaver