在XML文件中有些字符是被禁止使用的。以下技巧会告诉你如何识别它们、它们何时出现以及如何采取相应的措施。
by Jonathan Goodyear
几天前我用过一个在ASP.NET中定义的标准的AdRotator 服务器控件。你也许对AdRotator还不太熟悉,它可以使你在Web网页中随意选取广告(banner)。AdRotator用一个XML文件作为数据源,其结构很简单:

<Advertisements>
  <Ad>
    <ImageUrl>banner.gif</ImageUrl>
    <NavigateUrl>page.aspx</NavigateUrl>
    <AlternateText>Click Here</AlternateText>
    <Impressions>2000</Impressions>
    <Keyword>top_banner_slot</Keyword>          
  </Ad>
</Advertisements>

你可以将<Ad>元素添加到文件中使每个广告循环出现。在本文中我想着重介绍一下<NavigatedURl>元素。 如果用AdRotator服务器控件点击一个广告,浏览器便会重新定向到由该元素指定的URL上。这在通常情况下会运行的很好,但这一次我却发现它出错了:

This is an unexpected token. Expected 'SEMICOLON'

这使我花了些功夫去研究这个错误。后来我通过这个ASP.NET页面中显示的出错回溯列表(stack trace)找到了解决这个奇怪错误的线索。和你猜想的一样,.NET Framework的 System.Xml 命名空间下的XmlDocument类会在内部加载广告文件,该文件由AdRotator 服务器控件的AdvertisementFile属性所指定。在加载的过程中它遇到一个使它出错的字符。在检查XML广告文件的时候,我发现在其中一个<NavigateUrl>元素中使用了一个XML的非法字符--一个表示“和”的“&”字符。实际上,在XML文件中被禁止使用的ASCII字符共有五个:

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

注意尽管“&”字符被用在转义字符序列(escape character sequence)中,但在需要它本身时仍要进行转义(使用转义字串)。同样在C#里如果字符串中包含“\”时需要双写它。这就解释了为什么有时会出现“缺少分号”这一含义模糊的出错信息。所以当XML剖析器在我的<NavigateUrl>元素中找到这个“&”字符时,它就会去找相对应的分号来关闭当前的转义序列,如果找不到就会抛出一个异常。

幸运的是,解决问题的方法只是简单地将<NavigateUrl>元素中的“&”字符用转义序列“&amp;”来代替就可以了。请注意不止是在使用AdRotator服务器控件时会有这个问题,用在.NET的XML文件也可能会出现这个问题。使用以下代码也会产生异常:

XmlDocument d = new XmlDocument();
d.Load(@"c:\ads.xml");

它产生的异常和前面在ASP.NET中出现的异常很相似:

An unhandled exception of type 'System.Xml.XmlException' occurred in system.xml.dll Additional information: System error.

因此,如果你的XML解析到一个突发的问题,你不妨检查一下XML文件中的数据,看看是不是用到了什么非法字符。有时候出问题的正是这些小地方。

当心XML文件中的非法字符相关推荐

  1. 检查xml文件中包含非法xml字符的个数(

    xml中需要过滤的字符分为两类,一类是不允许出现在xml中的字符,这些字符不在xml的定义范围之内.另一类是xml自身要使用的字符,如果内容中有这些字符则需被替换成别的字符. 第一类字符 对于第一类字 ...

  2. XML文件中不允许出现的字符

    一共有五个: 所有的特殊字符对应的编码: 特殊字符 代替符号 特殊原因 & &    每一个代表符号的开头字符 > >   标记的结束字符 <  <  标记的开 ...

  3. c#中文件路径出现非法字符怎么办?解决也容易

    c#中如果需要生成文件路径,有时会抛出"文件路径中出现非法字符"的异常,这时我们就会找到这个非法的字符串,然后Replace替换掉.其实net类库提供了非法字符的数组,我们直接循环 ...

  4. 字符“”在XML文件中需要被转义

    今天弄Mybatis的配置文件时,因为这样一条语句 <property name="url" value="jdbc:mysql://localhost/cloud ...

  5. web.xml文件中的web-app元素

    [转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...

  6. SVN Files 的值“ .mine”无效。路径中具有非法字符。

    错误 1 Files 的值" < < < < < < < .mine"无效.路径中具有非法字符.     今天使用SVN进行更新的时候,出 ...

  7. web.xml文件中可以配置哪些内容?

    web.xml用于配置Web应用的相关信息,如:监听器(listener).过滤器(filter).Servlet.相关参数. 会话超时时间.错误页面等①配置Spring上下文加载监听器,加载Spri ...

  8. xml 名称中不能包含= 字符_可扩展标记语言:XML

    XML技术(DOM.SAX解析XML) 1 掌握XML基本语法,命名规则 2 掌握什么是Schema,什么是DTD 3 掌握DOM解析XML 4 掌握SAX解析XML 5 掌握JDOM解析XML 6 ...

  9. Android XML文件中设置字体

    Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体 可以采用an ...

最新文章

  1. AI一分钟 | 李开复:AI创业公司估值今年会降20%~30%;谷歌让搜索结果加载速度提升两倍...
  2. JMS(二):简单的JMS入门实例
  3. 区块链今年,胜过过去十年
  4. You need to use a Theme.AppCompat theme (or descendant) with this activity
  5. SNF软件开发机器人2018最新更新内容
  6. 【C语言】常见面笔试题(10道)
  7. IKAnalyzer 添加扩展词库和自定义词
  8. 委托实现信用卡用户定时还款功能
  9. 苹果电脑win10蓝牙音响卡顿_如何修复Windows 10蓝牙扬声器的声音延迟问题
  10. Classic BADI总结
  11. 如何编写snort的检测规则
  12. jlink 固件升级
  13. 存储器与CPU连接译码驱动方式
  14. 上市公司财务报告的那点事(9):用自己的语言解读《投资中最简单的事:投资方法》)
  15. 90后乱花钱?报告:攒钱是花钱4.5倍,初次理财比父母早10年
  16. c语言工资管理系统输出错误,c语言问题:工资纳税系统
  17. 蜗牛学院 第二天 js循环和练习题
  18. dojox.charting和dojox.timing构造Dojo动态图表
  19. 三维力控接入多比物联网云平台教程
  20. 正在颠覆人类创作的“生成式技术”到底是什么?

热门文章

  1. 最长高地(51Nod-2509)
  2. 家谱树(信息学奥赛一本通-T1351)
  3. 45 MM配置-采购-条件-定价过程-定义定价计算方案
  4. MFC工程按USB插口显示所有USB设备及插口(包括安卓)
  5. linux系统sudoers文件夹权限777以及/etc/profile文件修改后无法进入系统问题
  6. linux使用open无法打开驱动解决方式
  7. OpenGL画坐标轴指示图
  8. QT:为项目生成pro文件及中文显示乱码问题
  9. 如何找到一篇论文的源代码?
  10. linux版本和目录结构