使用xml文档解析xml时出错

时间:2015-09-15 18:27:56

标签: c# xml visual-studio xml-parsing xmldocument

使用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}}

1 个答案:

答案 0 :(得分:0)

XML中有5个特殊字符:"&'<>。属性或元素值中出现的任何一个都将导致XML解析器中断。

由于您控制了XML的生成,因此最好先修复XML,然后在解析之前尝试在应用程序中修改它。

<![CDATA[[]]>标记是执行此操作的好方法,将特殊字符替换为等效实体,例如&amp; &。如果您正在处理具有值中包含特殊字符的属性的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>