C#在ISO-8859-1中解析XML

时间:2017-05-02 14:41:16

标签: c# xml

我正在研究一种用于验证从大型机中获取的XML文件的工具。由于我无法控制的原因,每个XML文件都在ISO 8859-1中进行编码。

<?xml version="1.0" encoding="ISO 8859-1"?>

我的C#应用​​程序利用System.XML库来解析XML,并最终解析其中一个子节点中包含的消息字符串。

如果我手动删除XML编码行,它可以正常工作。但我想找到一个不需要人工干预的解决方案。有没有优雅的方法来解决这个问题?提前致谢。

抛出的异常读作:

  System.Xml.dll中发生了

System.Xml.XmlException'。系统不支持“ISO 8859-1”编码。第1行,第31位

我的代码是

XMLDocument xmlDoc = new XMLDocument();
xmlDoc.Load(//fileLocation);

1 个答案:

答案 0 :(得分:1)

正如Jeroen在评论中指出的那样,编码应该是:

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml version="1.0" encoding="ISO 8859-1"?>

(缺少短划线-)。

您可以使用带有显式编码的StreamReader来读取文件:

using (var reader = new StreamReader("//fileLocation", Encoding.GetEncoding("ISO-8859-1")))
{
  var xmlDoc = new XmlDocument();
  xmlDoc.Load(reader);
  // ...
}

(来自我在之前评论中链接的其他帖子中的competent_tech回答)。

如果您不想要using声明,我想您可以这样做:

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText("//fileLocation", Encoding.GetEncoding("ISO-8859-1")));

如果引用程序集XmlDocument(从.NET 3.5开始),则可以在命名空间System.Xml.Linq中使用the XDocument class,而不是System.Xml.Linq.dll。它有静态方法,如Load(Stream)Parse(string),您可以使用它们。