使用XML文档解析XML时出错

本文关键字:XML 出错 文档 使用 | 更新日期: 2023-09-27 18:13:03

我在用xml文档解析内部网站点的url时遇到了问题。下面是一个简化的例子:

XML文件

<?xml version="1.0" encoding="utf-8" ?>
<Nodes>
  <Node>
    <Project>Test</Project>
    <Link>https://www.google.com/?gws_rd=ssl#q=&+fails+in+url</Link>
  </Node>
</Nodes>

当我尝试在c#代码中解析和加载上面的xml时,我在"Xdoc"处得到一个错误。因为上面代码中使用了"&"。通常,我们可以通过使用"%26"来代替&来解决这个问题,但在我的情况下我不能,因为将"&"更改为"%26"会破坏url。ie。我认为"&"被用作查询字符串的一部分,并删除&正在破坏页面上的参数。

这可能不是有效的方法,但这是必需的。

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);
            }
        }

使用XML文档解析XML时出错

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

由于XML的生成由您控制,因此在解析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>