iOS Swift XMLParser无法获取xml标记内的完整数据

时间:2015-07-10 07:55:58

标签: ios xml swift nsstring nsxmlparser

我正在调用SOAP Web服务,最终响应包含一个JSON对象。 Web服务以十六进制字符串形式返回数据,我使用xml解析器获取正确的xml标记以获取JSON响应。代码工作正常,除非JSON包含大量数据。在大JSON的情况下,代码可以正常工作到POINT 1,十六进制字符串,当转换为UTF8String时,显示完整的xml,其中嵌入了完整的JSON。但是在解析之后,在POINT 2,我得到了不完整的JSON。日志输出显示一些JSON数据,没有关闭标记和大多数数据。当JSON响应很小时,这不会发生。 我认为JSON足够小以适应String变量,(有人可以确认swift中的字符串大小限制吗?) 另外我应该提到相同的Web服务,解析在Android版本的应用程序中工作正常。相关代码和示例XML粘贴在下面。

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
    mutableData.appendData(data)
}


func connectionDidFinishLoading(connection: NSURLConnection!) {
    println(mutableData) // ***********POINT 1: data is in Hex string format but otherwise complete upto this point
    indicator.stopAnimating()

    var xmlParser = NSXMLParser(data: mutableData)
    xmlParser.delegate = self
    xmlParser.parse()
    xmlParser.shouldResolveExternalEntities = true



}

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
    currentElementName = elementName
}

func parser(parser: NSXMLParser, foundCharacters string: String?) {
    //************ POINT 2: This is where it goes wrong, the below log output shows an incomplete string, hence incomplete JSON and JSON parser fails
    println(string)

    if currentElementName == methodname+"Result" {

        parseMyJSON(string!)
    }
    else if currentElementName == methodname2+"Result"
    {
        parseMyJSON2(string!)
    }
}

以下是来自网络服务的示例回复。

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><CustomerInformationResponse xmlns="http://tempuri.org/"><CustomerInformationResult>this tag contains the JSON I am trying to parse</CustomerInformationResult></CustomerInformationResponse></soap:Body></soap:Envelope>

0 个答案:

没有答案