On Dec 1, 2011, at 9:19 AM, Claude Saelens wrote: > Hello, > > I need to put XML fragments into another XML. Each time an XML fragment is > put into another XML it needs to be escaped to be send to backend a java > application. I used the function "CFXMLCreateStringByEscapingEntities" but it > seems it can only escape an XML fragment once, the second time strange > characters are added. > > For this is wrote following method: > > -(NSMutableString*)xmlEscape:(NSMutableString*)xmlString > { > NSMutableString *aNSString = [NSMutableString > stringWithString:xmlString]; > CFStringRef aCFString; > CFStringRef bCFString; > aCFString = CFStringCreateWithCString(NULL, [aNSString UTF8String], > NSUTF8StringEncoding); > bCFString = CFXMLCreateStringByEscapingEntities(kCFAllocatorDefault, > aCFString, NULL); > > NSMutableString *returnValue = [NSMutableString > stringWithString:(NSMutableString*)bCFString]; > > CFRelease(aCFString); > CFRelease(bCFString); > > return returnValue; > } > > The result is as follow: > > First fragment: > > <item type="Struct"> > <item name="path">Links/lets&dance.jpg</item> > <item name="spread_index">0</item> > </item> > <item type="Struct"> > <item name="path">Links/doubles_1/lets&dance.jpg</item> > <item name="spread_index">0</item> > </item> > > Escaping this and put in a second fragment gives: > > <item type="Struct"> > <item name="level_id">4_2</item> > <item name="images" type="Array"><item type="Struct"> > <item name="path">Links/lets&dance.jpg</item> > <item name="spread_index">0</item> > </item> > <item type="Struct"> > <item > name="path">Links/doubles_1/lets&dance.jpg</item> > <item name="spread_index">0</item> > </item> > </item> > </item> > > Escaping this fragment again gives: > > <item type="Struct"> > <item name="level_id">4_2</item> > <item name="images" type="Array">قÄ-&lt;قÄ،item > typeقÄ-=&quot;قÄ،StructقÄ-&quot;&gt;قÄ، > قÄ-&lt;قÄ،item > nameقÄ-=&quot;قÄ،pathقÄ-&quot;&gt;قÄ،Links/lets&amp;dance.jpgقÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > قÄ-&lt;قÄ،item > nameقÄ-=&quot;قÄ،spread_indexقÄ-&quot;&gt;قÄ،0قÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > قÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > قÄ-&lt;قÄ،item typeقÄ-=&quot;قÄ،StructقÄ-&quot;&gt;قÄ، > قÄ-&lt;قÄ،item > nameقÄ-=&quot;قÄ،pathقÄ-&quot;&gt;قÄ،Links/doubles_1قÄ-/قÄ،lets&amp;dance.jpgقÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > قÄ-&lt;قÄ،item > nameقÄ-=&quot;قÄ،spread_indexقÄ-&quot;&gt;قÄ،0قÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > قÄ-&lt;/قÄ،itemقÄ-&gt;قÄ، > </item> > </item> > > > Has anyone a solution for this problem? > > Thanks a lot for your help.
You didn't show the relevant code. (Your code above performs a couple of unnecessary copies). On Lion 10.7.2, using Xcode 4.2.1 with default Foundation Template, this works for me: int main (int argc, const char * argv[]) { @autoreleasepool { CFStringRef input = CFSTR("<item type=\"Struct\">\n" "<item name=\"path\">Links/lets&dance.jpg</item>\n" "<item name=\"spread_index\">0</item>\n" "</item>\n" "<item type=\"Struct\">\n" "<item name=\"path\">Links/doubles_1/lets&dance.jpg</item>\n" "<item name=\"spread_index\">0</item>\n" "</item>"); NSLog(@"input:\n%@\n\n", input); CFStringRef firstOut = CFXMLCreateStringByEscapingEntities( kCFAllocatorDefault, input, NULL); NSLog(@"output:\n%@\n\n", (id)firstOut); NSString* format = @"<item type=\"Struct\">\n" @"<item name=\"level_id\">4_2</item>\n" @"<item name=\"images\" type=\"Array\">%@</item>\n" @"</item>"; NSString* second = [NSString stringWithFormat:format, (id)firstOut]; CFStringRef secondOut = CFXMLCreateStringByEscapingEntities( kCFAllocatorDefault, (CFStringRef)second, NULL); NSLog(@"secondOut:\n%@\n\n", (id)secondOut); CFRelease(firstOut); CFRelease(secondOut); } return 0; } 2011-12-02 14:06:21.593 XMLEscape[61121:707] input: <item type="Struct"> <item name="path">Links/lets&dance.jpg</item> <item name="spread_index">0</item> </item> <item type="Struct"> <item name="path">Links/doubles_1/lets&dance.jpg</item> <item name="spread_index">0</item> </item> 2011-12-02 14:06:21.595 XMLEscape[61121:707] output: <item type="Struct"> <item name="path">Links/lets&dance.jpg</item> <item name="spread_index">0</item> </item> <item type="Struct"> <item name="path">Links/doubles_1/lets&dance.jpg</item> <item name="spread_index">0</item> </item> 2011-12-02 14:06:21.596 XMLEscape[61121:707] secondOut: <item type="Struct"> <item name="level_id">4_2</item> <item name="images" type="Array">&lt;item type=&quot;Struct&quot;&gt; &lt;item name=&quot;path&quot;&gt;Links/lets&amp;dance.jpg&lt;/item&gt; &lt;item name=&quot;spread_index&quot;&gt;0&lt;/item&gt; &lt;/item&gt; &lt;item type=&quot;Struct&quot;&gt; &lt;item name=&quot;path&quot;&gt;Links/doubles_1/lets&amp;dance.jpg&lt;/item&gt; &lt;item name=&quot;spread_index&quot;&gt;0&lt;/item&gt; &lt;/item&gt;</item> </item> Regards Andreas _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com