xml中的实体引用(<和&)

原创 2012年03月26日 11:51:22

       在聊天项目中发现内容里面只要有< 和&这两个字符,就显示不了,后来查资料发现这是xml中的非法字符在作怪,解决的办法是在编码之前,也就是把文本信息转化成xml格式之前先用实体引用替换了,message = [message stringByReplacingOccurrencesOfString:@"&" withString:@"&amp;"];
    message = [message stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"];;//实体引用;之后在xml解析的时候,在代理方法- (NSData *)          parser:(NSXMLParser *)parser
   resolveExternalEntityName:(NSString *)entityName
                    systemID:(NSString *)systemID {
  static NSDictionary* entityTable = nil;
  if (!entityTable) {
    entityTable = [[NSDictionary alloc] initWithObjectsAndKeys:
      [NSData dataWithBytes:" " length:1], @"nbsp",
      [NSData dataWithBytes:"&" length:1], @"&amp",
      [NSData dataWithBytes:"\"" length:1], @"quot",
      [NSData dataWithBytes:"<" length:1], @"&lt",
      [NSData dataWithBytes:">" length:1], @"gt",
      nil];
  }
  return [entityTable objectForKey:entityName];
}

里面,把实体引用的字符再替换回来,就ok了!

实体引用

在 XML 中,一些字符拥有特殊的意义。

如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

这样会产生 XML 错误:

<message>if salary < 1000 then</message>

为了避免这个错误,请用实体引用来代替 "<" 字符:

<message>if salary &lt; 1000 then</message> 

在 XML 中,有 5 个预定义的实体引用:

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 引号

注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

909422229__XML的实体引用

先看xml的文档结构: 1,XML声明 xml文档是由一组使用唯一名称标识的实体组成的。始终以一个声明开始,这个声明指定该文档遵循XML1.0的规范。XML也有一种逻辑结构,在逻辑上,文档的组...

.xml外部实体引用

ΧΜL引用外部DTD文件 这个就是XML的声明,声明也是处理指令,在XML中,所有的处理指令都以结束。 实体格式如下: 实体分两类: 1.一般实体(格式:&实体引用名) 2.参...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

xml的5 个预定义的实体引用

所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。 PCDATA PCDATA 指的是被解析的字符数据(Parse...

digester解析xml_org.xml.sax.SAXParseException; lineNumber: 2193; columnNumber: 41; 引用了实体 "nbsp", 但未声明它

四月 14, 2014 2:00:45 下午 org.apache.commons.digester.Digester fatalError 严重: Parse Fatal Error at lin...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)