惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
J
Java Code Geeks
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
雷峰网
雷峰网
D
DataBreaches.Net
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta

博客园 - 杨发达

Tracking User Activity export to csv + excel 打开乱码的问题 iis asp.net window 认证中的问题。 - 杨发达 sqlserver+job+ 超时 - 杨发达 - 博客园 在ASP.NET应用程序中使用身份模拟(Impersonation) - 杨发达 - 博客园 在ASP.NET应用程序中使用身份模拟+2.0 Snap 链接预览的应用 sql2005 fulltext search : 根据menu的配置项,执行定义的event How to generate an RSS feed for your web site using ASP.NET - 杨发达 .net Application Localization的db 实现 如何制作Mht 文件 + dotnet Composite UI Application Block Study (前) 开源的SSO方案--SourceID.NET OLAP 资源 使用CAB 建立Like Dnn 的桌面应用系统框架- window form application framework olap 常用的前台 Control Javascript: 设置textbox 为readonly . install window service
在XML文件中有些字符是被禁止使用的
杨发达 · 2008-11-24 · via 博客园 - 杨发达

在XML文件中有些字符是被禁止使用的。以下技巧会告诉你如何识别它们、它们何时出现以及如何采取相应的措施。

几天前我用过一个在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文件中的数据,看看是不是用到了什么非法字符。有时候出问题的正是这些小地方。