使用 xml 文档解析 xml 时出错
error while parsing xml using xml document
我在解析包含 xml 文档的 Intranet 站点的 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.load" 处收到错误在上面的代码中使用。通常,我们可以通过使用“%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 中有 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>
我在解析包含 xml 文档的 Intranet 站点的 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.load" 处收到错误在上面的代码中使用。通常,我们可以通过使用“%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 中有 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>