【问题标题】:There is an error in XML documentXML 文档中存在错误
【发布时间】:2016-05-12 13:58:13
【问题描述】:

我在尝试反序列化 xml 文档时遇到以下异常。 Xml 文档有一个标签作为 url,其中可能存在 google 搜索链接。 Google 搜索链接包含 '=',在反序列化 xml 文档时它不被接受。我正在从服务器获取 xml。所以我不能对 url 标签中存在的字符串做任何事情。我必须在我的客户方面做点什么。我该如何克服这个问题?

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <status>
  <code>000</code>
  <message>Successfully completed</message>
 </status>
 <reports>
   <report>
      <id>9973</id>
      <url>http://www.google.com/search?q=guns&client=safari&safe=active</url>
   </report>
 </reports>
</response>

例外:

System.Xml.XmlSerializer.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

内部异常:

{"'=' 是一个意外的标记。预期的标记是 ';'。第 136 行,位置 53。"}

【问题讨论】:

  • 我们如何重现这个问题?
  • "我正在从服务器获取 xml。"什么服务器?听起来它只是无效的 XML,提供它的人应该修复它。
  • 确实如此。检查在线 XML 验证器,您会发现它是无效的。
  • @Fresher:别那样做! (我们怎么会知道您正在这样做?)您已将有效的 XML 转换为非 XML。当您将结果传递给 XML 时,这显然不是一个好主意。
  • (不,问题不在于 = - 问题在于 XML 反序列化程序期望 &amp; 后跟一个实体名称,而 = 不能是的一部分。所以是&amp; 真正导致了问题...只是它在=注意到。)

标签: c# xmlserializer xml-deserialization


【解决方案1】:

您的 XML 无效。该 URL 违反了 XML 标准。具体来说,您应该转义 &amp;amp;: &amp;amp;

这是有效的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <status>
  <code>000</code>
  <message>Successfully completed</message>
 </status>
 <reports>
   <report>
      <id>9973</id>
      <url>http://www.google.com/search?q=guns&amp;client=safari&amp;safe=active</url>
   </report>
 </reports>
</response>

检查您的 XML 导出函数以确保它正确地转义了 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多