diff --git a/MSTranslateVendor/MSTranslateVendor.m b/MSTranslateVendor/MSTranslateVendor.m
index b939865..eca517d 100644
--- a/MSTranslateVendor/MSTranslateVendor.m
+++ b/MSTranslateVendor/MSTranslateVendor.m
@@ -18,6 +18,7 @@ @interface MSTranslateVendor()
NSMutableData *_responseData;
NSMutableURLRequest *_request;
NSString *_elementString;
+ NSMutableString * elementContents;
NSMutableArray *_attributeCollection;
NSMutableArray *_translatedArray;
NSMutableDictionary *_sentencesDict;
@@ -149,37 +150,63 @@ - (void)requestTranslateArray:(NSArray *)translateArray
_request = [[NSMutableURLRequest alloc] init];
NSString *_appId = [NSString stringWithFormat:@"Bearer %@", (!_accessToken)?[MSTranslateAccessTokenRequester sharedRequester].accessToken:_accessToken];
-
- NSMutableString *schemaCollection = [@"" mutableCopy];
+
+ NSXMLElement *root = [[NSXMLElement alloc] initWithName:@"TranslateArrayRequest"];
+ [root addChild: [NSXMLElement elementWithName: @"AppId"]];
+
+ if(0 != from.length)
+ {
+ NSXMLElement * fromElement = [NSXMLElement elementWithName: @"From" stringValue: from];
+ [root addChild: fromElement];
+ } // End of from length
+
+ NSXMLElement * optionsNode = [NSXMLElement elementWithName: @"Options"];
+
+ NSXMLElement * categoryNode = [NSXMLElement elementWithName: @"Category"];
+ [categoryNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: categoryNode];
+
+ NSXMLElement * contentTypeNode = [NSXMLElement elementWithName: @"ContentType" stringValue: @"text/plain"];
+ [contentTypeNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: contentTypeNode];
+
+ NSXMLElement * reservedFlagsNode = [NSXMLElement elementWithName: @"ReservedFlags"];
+ [reservedFlagsNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: reservedFlagsNode];
+
+ NSXMLElement * stateNode = [NSXMLElement elementWithName: @"State"];
+ [stateNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: stateNode];
+
+ NSXMLElement * uriNode = [NSXMLElement elementWithName: @"Uri"];
+ [uriNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: uriNode];
+
+ NSXMLElement * userNode = [NSXMLElement elementWithName: @"User"];
+ [userNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]];
+ [optionsNode addChild: userNode];
+
+ [root addChild: optionsNode];
+
+ NSXMLElement * textsNode = [NSXMLElement elementWithName: @"Texts"];
for (NSString *text in translateArray)
{
- [schemaCollection appendFormat:@"%@\n", generateSchema(text)];
- }
+ NSXMLElement * stringNode = [NSXMLElement elementWithName: @"string" stringValue: text];
+ [stringNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.microsoft.com/2003/10/Serialization/Arrays"]];
+ [textsNode addChild: stringNode];
+ } // End of for loop
- NSString *xmlString = [NSString stringWithFormat:@"\n\
- \n\
- %@\n\
- \n\
- \n\
- text/plain\n\
- \n\
- \n\
- \n\
- \n\
- \n\
- %@ \n\
- %@\n\
- ", from?[NSString stringWithFormat:@"%@",from]:@"", schemaCollection, to];
-
- NSError *error = NULL;
- NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s{2,}" options:0 error:&error];
- NSString *result = [regex stringByReplacingMatchesInString:xmlString options:0 range:NSMakeRange(0, [xmlString length]) withTemplate:@" "];
+ [root addChild: textsNode];
+ [root addChild: [NSXMLElement elementWithName: @"To" stringValue: to]];
+
+ NSXMLDocument *xmlRequest = [NSXMLDocument documentWithRootElement: root];
+ NSData * xmlData = [xmlRequest XMLDataWithOptions: NSXMLNodePrettyPrint];
NSURL *requestURL = [NSURL URLWithString:@"http://api.microsofttranslator.com/v2/Http.svc/TranslateArray"];
[_request setURL:[requestURL standardizedURL]];
[_request setHTTPMethod:@"POST"];
- [_request setHTTPBody:[result dataUsingEncoding:NSUTF8StringEncoding]];
+ [_request setHTTPBody: xmlData];
[_request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[_request setValue:_appId forHTTPHeaderField:@"Authorization"];
@@ -384,6 +411,14 @@ - (void)parserDidEndDocument:(NSXMLParser *)parser
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
_elementString = [elementName copy];
+
+ if(parser.tag == REQUEST_TRANSLATE_ARRAY_TAG)
+ {
+ if([elementName isEqualToString:@"TranslatedText"])
+ {
+ elementContents = [NSMutableString string];
+ }
+ }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
@@ -420,7 +455,7 @@ - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([_elementString isEqualToString:@"TranslatedText"])
{
- [_translatedArray addObject:string];
+ [elementContents appendString: string];
}
}
else if(parser.tag == REQUEST_DETECT_TEXT_TAG)
@@ -461,4 +496,15 @@ - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
}
}
+- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
+{
+ if(parser.tag == REQUEST_TRANSLATE_ARRAY_TAG)
+ {
+ if([elementName isEqualToString:@"TranslatedText"])
+ {
+ [_translatedArray addObject: [elementContents copy]];
+ }
+ } // End of translated
+}
+
@end
\ No newline at end of file