Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#解析ISO-8859-1中的XML_C#_Xml - Fatal编程技术网

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

C#解析ISO-8859-1中的XML,c#,xml,C#,Xml,我正在开发一个用于验证从大型机获取的XML文件的工具。出于我无法控制的原因,每个XML文件都用ISO 8859-1编码 <?xml version="1.0" encoding="ISO 8859-1"?> 正如Jeroen在评论中指出的,编码应该是: <?xml version="1.0" encoding="ISO-8859-1"?> (来自competent_tech在我先前评论中链接的其他线程中的回答) 如果您不想使用语句,我想您可以: var xmlDoc

我正在开发一个用于验证从大型机获取的XML文件的工具。出于我无法控制的原因,每个XML文件都用ISO 8859-1编码

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

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

<?xml version="1.0" encoding="ISO-8859-1"?>
(来自
competent_tech
在我先前评论中链接的其他线程中的回答)

如果您不想使用
语句,我想您可以:

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


如果引用程序集
System.Xml.Linq.dll
(自.NET 3.5以来),则可以在命名空间
System.Xml.Linq
中使用,而不是
XmlDocument
。它有静态方法,如
Load(Stream)
Parse(string)
,您可以如上所述使用这些方法。

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

<?xml version="1.0" encoding="ISO-8859-1"?>
(来自
competent_tech
在我先前评论中链接的其他线程中的回答)

如果您不想使用
语句,我想您可以:

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


如果引用程序集
System.Xml.Linq.dll
(自.NET 3.5以来),则可以在命名空间
System.Xml.Linq
中使用,而不是
XmlDocument
。它有一些静态方法,比如
Load(Stream)
Parse(string)
,您可以像上面一样使用这些方法。

请显示您的代码。实际的代码是什么?错误的实际信息是什么?实际的文件是什么
XDocument.Parse(“”)可以正常工作。(这当然是
System.Xml.Linq
,而不是普通的
System.Xml
)如果所有其他操作都失败,显然,您可以在将结果解析为Xml之前执行
String.Replace
来删除指令。它抛出的错误是:System.Xml.xmleexception“发生在System.Xml.dll中。系统不支持“ISO 8859-1”编码。第1行,位置31。简单地说,代码如下:
XMLDocument xmlDoc=new XMLDocument();加载(//fileLocation)
。这就是它失败的原因。对不起,我把它编辑到了我的回复中,我不知道按enter键提交了我的评论。我是这个网站的新手-抱歉。问题是
ISO 8859-1
不是公认的内置编码名称<代码>ISO-8859-1
is。愚蠢但真实。在.NET4.6之前(它允许您注册其他编码提供程序),我不知道是否有办法添加编码别名,但我对此表示怀疑。基于此,有许多可能的解决方法(最简单的方法是添加连字符…),比如首先手动读取文件,然后使用
.LoadXml
(这会忽略指令中的编码,因为字符串在内部必须是UTF-16)。如果文件太大了,你就得更精细一些。请显示你的代码。实际代码是什么?错误的实际信息是什么?实际的文件是什么
XDocument.Parse(“”)可以正常工作。(这当然是
System.Xml.Linq
,而不是普通的
System.Xml
)如果所有其他操作都失败,显然,您可以在将结果解析为Xml之前执行
String.Replace
来删除指令。它抛出的错误是:System.Xml.xmleexception“发生在System.Xml.dll中。系统不支持“ISO 8859-1”编码。第1行,位置31。简单地说,代码如下:
XMLDocument xmlDoc=new XMLDocument();加载(//fileLocation)
。这就是它失败的原因。对不起,我把它编辑到了我的回复中,我不知道按enter键提交了我的评论。我是这个网站的新手-抱歉。问题是
ISO 8859-1
不是公认的内置编码名称<代码>ISO-8859-1
is。愚蠢但真实。在.NET4.6之前(它允许您注册其他编码提供程序),我不知道是否有办法添加编码别名,但我对此表示怀疑。基于此,有许多可能的解决方法(最简单的方法是添加连字符…),比如首先手动读取文件,然后使用
.LoadXml
(这会忽略指令中的编码,因为字符串在内部必须是UTF-16)。如果文件太大,那么您就必须更精细一些。我最终使用了
xmlDoc.LoadXml(file.ReadAllText(“//fileLocation”,Encoding.GetEncoding(“ISO-8859-1”)而且效果很好。谢谢最后我使用了
xmlDoc.LoadXml(File.ReadAllText(//fileLocation),Encoding.GetEncoding(“ISO-8859-1”)而且效果很好。谢谢
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText("//fileLocation", Encoding.GetEncoding("ISO-8859-1")));