文档章节

parser:parseErrorOccurred31#parser:parseErrorOccur

Liberxue
 Liberxue
发布于 2015/05/04 10:28
字数 652
阅读 16
收藏 0
点赞 0
评论 0
//取XML文件的前40个字节
        NSData * xmldata = [self.ItemData subdataWithRange:NSMakeRange(0,40)];
 
        //以UTF-8编码进行解码
        NSString *xmlstr = [[NSString alloc] initWithData:xmldata encoding:NSUTF8StringEncoding];
        //NSLog(@"XML HEADER: %@", xmlstr);
        //搜索GB2312,如果找到,就对整个文件进行编码转换        
        if ([xmlstr rangeOfString:@"\"GB2312\"" options:NSCaseInsensitiveSearch].location != NSNotFound)
        {
         //   NSLog(@"GB2312 encoding founded.");
            
            NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
            NSString *utf8str = [[[NSString alloc] initWithData:self.ItemData encoding:enc] autorelease];
            utf8str = [utf8str stringByReplacingOccurrencesOfString:@"\"GB2312\"" withString:@"\"utf-8\"" options:NSCaseInsensitiveSearch range:NSMakeRange(0,40)];
            NSData *newData = [utf8str dataUsingEncoding:NSUTF8StringEncoding];
            self.ItemData = newData;   
        }

GB2312或GBK编码的网页,要先用gb编码解码,然后替换其中的gb字符串,再用utf8编码成data给parser就能解析中文网页了。


NSXMLParser 将停止解析在遇到特殊字符后


我读一个 XML 文件从谷歌天气 api 和解析它使用 NSXMLParser。城市问题是巴黎。这是我得到的简短 xml 输出

           <?xml version="1.0"?>
    <xml_api_reply version="1">
    <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information>
    <city data="Paris, Île-de-France"/>
    <postal_code data="Paris"/>
    <latitude_e6 data=""/>
    <longitude_e6 data=""/> 
...
...

现在我用来削去此 xml 的代码是

NSString *address = @"http://www.google.com/ig/api?weather=Paris";
    NSURL *URL = [NSURL URLWithString:address];

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
    [parser setDelegate:self];
    [parser parse];
...

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{

    NSLog(@"XML Parser 1 ... elementName ... %@", elementName);

}

这是我获得上述 xml 的输出

XML Parser 1 ... elementName ... xml_api_reply
XML Parser 1 ... elementName ... weather
XML Parser 1 ... elementName ... forecast_information

问题是它分析的所有标记,直到它到达"城市数据"因为巴黎 î l e de 法国,然后它就会停止的名称中有非 ascii 字符。它不会处理之后像 postal_code 的标签。纬度、 经度等。

所以我的问题是,有什么办法可以从返回的 URL XML 字符串中删除所有非 ascii 字符吗?

解决方法 1:

还行。我已经解决了此问题。这是怎么弄来的工作。

我首先做的就是用特殊字符的 URL 的 XML。然后我去掉从 XML 字符串的所有特殊字符。然后我将字符串转换为 NSdata 然后把 nsdata 对象传递给我的 NSXMLParser。因为它有没有更多特殊字符 NSXMLParser 是快乐。

这里是为任何人在将来可能会遇到的代码。大感谢您对这篇文章作出了贡献的人 !

NSString *address = @"http://www.google.com/ig/api?weather=Paris";
    NSURL *URL = [NSURL URLWithString:address];
    NSError *error;    
    NSString *XML = [NSString stringWithContentsOfURL:URL encoding:NSASCIIStringEncoding error:&error];

    //REMOVE ALL NON-ASCII CHARACTERS
         NSMutableString *asciiCharacters = [NSMutableString string];
         for (NSInteger i = 32; i < 127; i++)  
         {
         [asciiCharacters appendFormat:@"%c", i];
         }

         NSCharacterSet *nonAsciiCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:asciiCharacters] invertedSet];

         XML = [[XML componentsSeparatedByCharactersInSet:nonAsciiCharacterSet] componentsJoinedByString:@""];

    NSData *data = [XML dataUsingEncoding:NSUTF8StringEncoding];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    [parser setDelegate:self];
    [parser parse];




本文转载自:http://www.itstrike.cn/question/377c3aeb-469b-47eb-a48c-93ef464fa020.html

共有 人打赏支持
Liberxue
粉丝 31
博文 10
码字总数 7658
作品 2
朝阳
高级程序员
showcase的初始化时是不是少一张表?

启动报错 Caused by: org.quartz.JobPersistenceException: Couldn't retrieve trigger: Table "QRTZ_TRIGGERS" not found; SQL statement: SELECT * FROM QRTZ_TRIGGERS WHERE SCHED_NAME =......

WangDing ⋅ 2012/03/16 ⋅ 6

Python argparse 模块参考手册

是 Python 标准库中用来解析命令行参数和选项的模块,其是为替代已经过时的 optparse 模块而生的,该模块在 Python2.7 中被引入。argparse模块的作用是用于解析命令行参数。 创建解析器 使用...

Konghy ⋅ 2016/06/30 ⋅ 0

使用 SAC 解析 CSS 的一个异常

异常信息: Exception in thread "main" java.lang.NullPointerException: No value for sac.parser property at org.w3c.css.sac.helpers.ParserFactory.makeParser(ParserFactory.java:35)......

红薯 ⋅ 2012/03/12 ⋅ 1

SQL网格不支持FULL JOIN全接连吗?

@李玉珏 你好,想跟你请教个问题:我在学习使用Ignite 2.1.0时写了一条关联语句,想用全连接进行数据查询,但是出了一个异常: Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQ...

NJCrazyRen ⋅ 2017/08/21 ⋅ 1

[ERROR] [com.alibaba.druid.filter.stat.StatFilter] - merge sql error

@wenshao 你好,请问下这个问题有计划在新版本里面修复吗: 1) druid版本号:0.2.12 2) 产生错误的SQL: select COUNT(id) from log where ctime>ADDDATE(NOW(),INTERVAL -? HOUR) and result......

Sokos ⋅ 2013/07/18 ⋅ 3

天眼查接口token, _utm获取

同学让我帮忙看看天眼查,说token和_utm取不出来。其实挺简单的,通过观察请求,发现每次取数据时,都会打一个tongji的接口。发现里面有个v参数,取出来,逗号分隔,ascii转字符,再拼接。直...

疯狂的小企鹅 ⋅ 2016/12/16 ⋅ 8

MYSQL · 新特性 · MySQL 8.0对Parser所做的改进

背景介绍 众所周知,MySQL Parser是利用C/C++实现的开源yacc/lex组合,也就是 GNU bison/flex。Flex负责生成tokens, Bison负责语法解析。开始介绍MySQL 8.0的新特新之前,我们先简单了解一下...

阿里云RDS-数据库内核组 ⋅ 2017/04/03 ⋅ 0

使用XmlPullParser解析XML字符串或者输入流

XmlPullParser可以解析输入流和字符串:

fantasiter ⋅ 2016/07/21 ⋅ 0

解析网页后是否需要释放资源

使用过htmlparser的高手,想请教下,在用Parser 解析网页后是不是应该释放资源啊?我做定时抓取网页,但tomcat6在运行一段时间后,从最初的48m 上升到140m左右,如果继续运行,应该还会增长.哪位有...

huangx ⋅ 2009/09/16 ⋅ 9

fastjson有一个问题,我不知道是bug,还是我不会用,请高人指点!

json串:String json= [ {id:1,a:"a1",bs:[{id:1,b:"b1"},{id:2,b:"b2"},{id:3,b:"b3"},{id:4,b:"b4"}]}, {id:2,a:"a2",bs:[{id:1,b:"b1"},{id:2,b:"b2"},{id:3,b:"b3"},{id:4,b:"b4"}]}, {i......

寻觅一只耳朵 ⋅ 2012/12/14 ⋅ 9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 28分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部