mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-22 20:18:53 +08:00
Added support for parsing XML containing CDATA content. fixes #327
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
// Assume that empty strings are irrelevant and go for an attribute-collection instead
|
||||
if ([val length] == 0) {
|
||||
val = [NSMutableDictionary dictionary];
|
||||
NSDictionary* elem = [NSDictionary dictionaryWithObject:val forKey:nodeName];
|
||||
NSMutableDictionary* elem = [NSMutableDictionary dictionaryWithObject:val forKey:nodeName];
|
||||
[nodes addObject:elem];
|
||||
} else {
|
||||
[attrs setValue:val forKey:nodeName];
|
||||
@@ -42,7 +42,7 @@
|
||||
[nodes addObject:attrs];
|
||||
}
|
||||
} else {
|
||||
NSDictionary* elem = [NSDictionary dictionaryWithObject:val forKey:nodeName];
|
||||
NSMutableDictionary* elem = [NSMutableDictionary dictionaryWithObject:val forKey:nodeName];
|
||||
[nodes addObject:elem];
|
||||
}
|
||||
xmlElement* element = (xmlElement*)currentNode;
|
||||
@@ -61,10 +61,10 @@
|
||||
[nodes addObject:attrs];
|
||||
}
|
||||
}
|
||||
} else if (currentNode->type == XML_TEXT_NODE) {
|
||||
} else if (currentNode->type == XML_TEXT_NODE || currentNode->type == XML_CDATA_SECTION_NODE) {
|
||||
xmlChar* str = xmlNodeGetContent(currentNode);
|
||||
NSString* part = [NSString stringWithCString:(const char*)str encoding:NSUTF8StringEncoding];
|
||||
if ([[part stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0) {
|
||||
NSString* part = [[NSString stringWithCString:(const char*)str encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
if ([part length] > 0) {
|
||||
[nodes addObject:part];
|
||||
}
|
||||
xmlFree(str);
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
252CF8C013E25FE00093BBD6 /* RKDynamicMappingModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 252CF8BF13E25FE00093BBD6 /* RKDynamicMappingModels.m */; };
|
||||
2530078E137838D30074F3FD /* RKObjectMapper_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2530078D137838D30074F3FD /* RKObjectMapper_Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
253007A2137876770074F3FD /* OCHamcrestIOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 253007A1137876770074F3FD /* OCHamcrestIOS.framework */; };
|
||||
2537ABF31412A3B90043BE9F /* zend.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2537ABF21412A3B90043BE9F /* zend.xml */; };
|
||||
2538C05C12A6C44A0006903C /* RKRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2538C05A12A6C44A0006903C /* RKRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
2538C05D12A6C44A0006903C /* RKRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2538C05B12A6C44A0006903C /* RKRequestQueue.m */; };
|
||||
253A08AF12551EA500976E89 /* Network.h in Headers */ = {isa = PBXBuildFile; fileRef = 253A08AE12551EA500976E89 /* Network.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@@ -466,6 +467,7 @@
|
||||
252CF8BF13E25FE00093BBD6 /* RKDynamicMappingModels.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RKDynamicMappingModels.m; sourceTree = "<group>"; };
|
||||
2530078D137838D30074F3FD /* RKObjectMapper_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RKObjectMapper_Private.h; sourceTree = "<group>"; };
|
||||
253007A1137876770074F3FD /* OCHamcrestIOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OCHamcrestIOS.framework; sourceTree = "<group>"; };
|
||||
2537ABF21412A3B90043BE9F /* zend.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = zend.xml; sourceTree = "<group>"; };
|
||||
2538C05A12A6C44A0006903C /* RKRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RKRequestQueue.h; sourceTree = "<group>"; };
|
||||
2538C05B12A6C44A0006903C /* RKRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RKRequestQueue.m; sourceTree = "<group>"; };
|
||||
253A07FC1255161B00976E89 /* libRestKitNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRestKitNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@@ -1344,6 +1346,7 @@
|
||||
25B72A5713FBEDEE009A340D /* container_attributes.xml */,
|
||||
25B72A5913FBF13B009A340D /* attributes_without_text_content.xml */,
|
||||
25769F181409CC9C003FCDBC /* orders.xml */,
|
||||
2537ABF21412A3B90043BE9F /* zend.xml */,
|
||||
);
|
||||
path = XML;
|
||||
sourceTree = "<group>";
|
||||
@@ -1998,6 +2001,7 @@
|
||||
25B72A5813FBEDEE009A340D /* container_attributes.xml in Resources */,
|
||||
25B72A5A13FBF13B009A340D /* attributes_without_text_content.xml in Resources */,
|
||||
25769F191409CC9C003FCDBC /* orders.xml in Resources */,
|
||||
2537ABF31412A3B90043BE9F /* zend.xml in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
27
Specs/Fixtures/XML/zend.xml
Normal file
27
Specs/Fixtures/XML/zend.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0"?>
|
||||
<Api generator="zend" version="1.0">
|
||||
<getList>
|
||||
<map id_map="4">
|
||||
<title><![CDATA[ Main World Map ]]></title>
|
||||
<subtitle><![CDATA[ ]]></subtitle>
|
||||
<description><![CDATA[ ]]></description>
|
||||
</map>
|
||||
<map id_map="3">
|
||||
<title><![CDATA[ Section Map: Narshe Village ]]></title>
|
||||
<subtitle><![CDATA[ ]]></subtitle>
|
||||
<description><![CDATA[ ]]></description>
|
||||
</map>
|
||||
<map id_map="2">
|
||||
<title><![CDATA[ Section Map: Gulgu Volcano Level 1 ]]></title>
|
||||
<subtitle><![CDATA[ Kary lives here. ]]></subtitle>
|
||||
<description><![CDATA[ ]]></description>
|
||||
</map>
|
||||
<map id_map="1">
|
||||
<title><![CDATA[ Section Map: Dime Tower Level 4 ]]></title>
|
||||
<subtitle><![CDATA[ Upper Floor ]]></subtitle>
|
||||
<description><![CDATA[ ]]></description>
|
||||
</map>
|
||||
<total><![CDATA[ 4 ]]></total>
|
||||
<status>success</status>
|
||||
</getList>
|
||||
</Api>
|
||||
@@ -135,4 +135,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)itShouldParseXMLWithCDATA {
|
||||
NSString *XML = RKSpecReadFixture(@"zend.xml");
|
||||
RKXMLParserLibXML* parser = [[RKXMLParserLibXML new] autorelease];
|
||||
NSDictionary *output = [parser parseXML:XML];
|
||||
NSArray *map = [output valueForKeyPath:@"Api.getList.map"];
|
||||
assertThat(map, isNot(nilValue()));
|
||||
assertThat(map, hasCountOf(4));
|
||||
assertThat([[map objectAtIndex:0] valueForKey:@"title"], is(equalTo(@"Main World Map")));
|
||||
assertThat([[map objectAtIndex:1] valueForKey:@"title"], is(equalTo(@"Section Map: Narshe Village")));
|
||||
assertThat([[map objectAtIndex:2] valueForKey:@"subtitle"], is(equalTo(@"Kary lives here.")));
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user