Dodaj następujące elementy do GDataXMLNode.h
+ (GDataXMLElement *)elementWithName:(NSString *)name cDataStringValue:(NSString *)value;
- (void)setCDataStringValue:(NSString *)value;
Dodaj poniższe linie do 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);
}
}
}
Nie musisz metodę setCDataStringValue dla tego przykładu, ale włączyła ją tak, więc można opcjonalnie utworzyć GDataXMLNode i dodać CDATA później.
Twój Przykładem może wtedy stać:
GDataXMLElement * body = [GDataXMLNode elementWithName:@"body"];
GDataXMLElement * response = [GDataXMLNode elementWithName:@"response" cDataStringValue:@"<hello>"];
[body addChild:response];
NSLog(@"%@",[body XMLString]);
które wyjścia:
<body><response><![CDATA[<hello>]]></response></body>
kiedykolwiek dowiedzieć? Chciałbym też wiedzieć. – ransomweaver
Powoduje to całkowite usunięcie CDATA: GDataXMLElement * n = [[przydział GDataXMLElement] initWithXMLString: @ " " error: nil]; –
ransomweaver
, więc dostaniesz mistring –
ransomweaver