使用xml文档解析内部网站点的URL时遇到问题。以下是一个简化示例:
XML文件
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(Server.MapPath("~/Content/XMLFile1.xml"));
XmlNodeList lNodes = xdoc.SelectNodes("/Nodes/Node");
foreach (XmlElement p in lNodes)
{
var m = p["Link"].InnerText;
string s = "window.open('" + m + "', 'popup_window', 'width=300,height=100,left=100,top=100,resizable=yes');";
//ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);
ScriptManager.RegisterStartupScript(this, this.GetType(), "script", s, true);
}
}
当我尝试在我的c#代码中解析并加载上面的xml时,由于上面代码中使用了“& ”,我在“Xdoc.load”处收到错误。一般来说,我们可以通过使用“%26”代替&来解决这个问题,但在我的情况下我不能改变“&”到“%26”正在打破网址。即。我认为“&”被用作查询字符串的一部分并删除&打破了页面上的参数。
这可能不是有效的方法,但这是要求。
{{1}}
答案 0 :(得分:0)
XML中有5个特殊字符:"
,&
,'
,<
和>
。属性或元素值中出现的任何一个都将导致XML解析器中断。
由于您控制了XML的生成,因此最好先修复XML,然后在解析之前尝试在应用程序中修改它。
<![CDATA[[]]>
标记是执行此操作的好方法,将特殊字符替换为等效实体,例如&
&
。如果您正在处理具有值中包含特殊字符的属性的XML,那么您将 使用字符实体,因为CDATA不会使用这些属性。
如果它是元素的值,您可以使用任何一种方法。
所以,使用上面发布的示例:
<Link>https://www.google.com/?gws_rd=ssl#q=&+fails+in+url</Link>
会变成:
<Link><![CDATA[https://www.google.com/?gws_rd=ssl#q=&+fails+in+url]]></Link>