今天用C#读写XML文档,总出现下面的错误:
分析 EntityName 时出错。行1,位置9。
出错地方的源程序为:
//......
pathEle.InnerXml = reducedStr(videoPath, RootDirDirecotry + "\\");
videoInfoEle.AppendChild(pathEle);
XmlElement urlEle = combineXml.CreateElement("VideoPageUrl");
urlEle.InnerXml = VideoUrl;
videoInfoEle.AppendChild(urlEle);
出错就出在
这一句,其中VideoUrl是一个URL地址。
经过搜索发现,是因为此地址中包含了一个“&”符号:
http://v.youku.com/v_show/id_XODIxNTIwODQw.html?f=23050445&from=y1.3-paike-grid-4071-10195.90404-90171.5-1
解决方法为:
pathEle.InnerXml = reducedStr(videoPath, RootDirDirecotry + "\\");
videoInfoEle.AppendChild(pathEle);
XmlElement urlEle = combineXml.CreateElement("VideoPageUrl");
string tmpVideoUrl = videoUrl;
if (tmpVideoUrl.Contains("&") || tmpVideoUrl.Contains("<") || tmpVideoUrl.Contains(">") || tmpVideoUrl.Contains("\"") || tmpVideoUrl.Contains("\'"))
{
tmpVideoUrl = tmpVideoUrl.Replace("&","&");
tmpVideoUrl = tmpVideoUrl.Replace("<","<");
tmpVideoUrl = tmpVideoUrl.Replace(">",">");
tmpVideoUrl = tmpVideoUrl.Replace("\"",""");
tmpVideoUrl = tmpVideoUrl.Replace("\'","'");
}
urlEle.InnerXml = tmpVideoUrl;
videoInfoEle.AppendChild(urlEle);</span></span>
即将"&"替换为"&"即可。
**********************************************************************
原因分析:
在涉及到xml编与xslt程的过程中,忽略了xml中特殊符号表示的方法。
下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见 XML 1.0 规范 中的 XML 1.0 规范。
特殊字符 特殊含义 实体编码
> 开始标记 >
< 结束标记 <
" 引号 "
' 撇号 '
& "&"符号 &