我正在研究一种用于验证从大型机中获取的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);
答案 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)
,您可以使用它们。