微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XmlDocument加载与带有右引号的LoadXml

如何解决XmlDocument加载与带有右引号的LoadXml

| 我看到XmlDocument Load()和LoadXml()在.NET 2.0中的工作方式有所不同。给定以下XML文档(请注意使用右引号,ASCII代码146):
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<nodes>
  <node>Some Data ’</node>
</nodes>
当以字符串形式传递时,为什么用LoadXml()可以很好地加载,但如果以文档形式传递给Load(),则失败。即其他XML编辑器也不会加载和显示文件。 简化的代码示例:
[WebMethod]
public bool SubmitData(string xmlDoc)
{
   try
   {
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(xmlDoc);
   }
   catch
   {
      return false;
   }

   return true;
}
我知道代码很差,但这只是为了演示问题。如果字符串\“ xmlDoc \”不是合法的xml文档,那么我正试图使它失败。 我无法控制发送给我的XML的内容。我只是收到它并通过Web服务使用它。显然,人们的呼唤是从Word Doc复制和粘贴数据。我也没有设计这个,但是我坚持维护它。 :)     

解决方法

        区别在于编码。从文件加载时,将应用utf-8解码,并且您的代码146可能不是有效的utf-8。 LoadXml会忽略编码,因为不需要对.Net字符串进行解码。因此,您的特殊字符是有效字符,一切都很好。     ,        如果有人感兴趣,我们找到了另一种“验证”字符串的方法,以至少检查正确的字符。我们之前曾尝试过类似的事情,但未在UTF8Encoding上使用正确的构造函数,因此未获得我们期望的结果。这不一定会检查XML的正确性,但至少会验证发送给我们的字符。
string xmlDoc = \"\"; // whatever has been passed in.
try
{
   System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false,true);
   byte[] bytes = new System.Text.UnicodeEncoding().GetBytes(xmlDoc);
   utf8.GetChars(bytes);
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
   return false;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。