我正在开发一种用于验证从大型机获取的 XML 文件的工具。由于我无法控制的原因,每个 XML 文件都以 ISO 8859-1 编码。
<?xml version="1.0" encoding="ISO 8859-1"?>
我的 C# 应用程序利用 System.XML 库来解析 XML 并最终解析包含在其中一个子节点中的消息字符串。
如果我手动删除 XML 编码行,它就可以正常工作。但我想找到一种不需要人工干预的解决方案。有没有什么优雅的方法来解决这个问题?提前致谢。
抛出的异常如下:
System.Xml.XmlException'发生在 System.Xml.dll 中。系统不支持“ISO 8859-1”编码。第 1 行,位置 31
我的代码是
XMLDocument xmlDoc = new XMLDocument();
xmlDoc.Load(//fileLocation);
正如 Jeroen 在评论中指出的,编码应该是:
<?xml version="1.0" encoding="ISO-8859-1"?>
不是:
<?xml version="1.0" encoding="ISO 8859-1"?>
(缺少破折号-
)。
StreamReader
无论如何,您可以使用带有显式编码的 a 来读取文件:
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")));
如果引用程序集(自 .NET 3.5 起)XmlDocument
,则可以使用命名空间中的XDocument
类代替。它的静态方法,比如和你可以如上使用。System.Xml.Linq
System.Xml.Linq.dll
Load(Stream)
Parse(string)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句