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 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。



相关文章推荐

.xml外部实体引用

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

909422229__XML的实体引用

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

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...

xml格式的实体

  • 2014年03月26日 17:39
  • 2KB
  • 下载

Android使用Dom4j解析xml,并存入自定义实体

说到解析xml,相信大家都知道Android中的三中解析方式,这里就不在多做介绍了,说一下最近刚刚用的dom4j吧,dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。do...

xstream实现实体类序列化转xml

  • 2016年09月04日 15:27
  • 432KB
  • 下载

c# XML和实体类之间相互转换(序列化和反序列化)

我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改。 using System; using System.Collection...
  • zzy7075
  • zzy7075
  • 2016年03月01日 09:39
  • 3509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml中的实体引用(<和&)
举报原因:
原因补充:

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