xml.LoadData – 根级别的数据无效。 1号线,位置1

我试图parsing一些WiX安装程序中的XML。 XML将成为从Web服务器返回的所有错误的对象。 我在这个代码中得到问题标题中的错误:

XmlDocument xml = new XmlDocument(); try { xml.LoadXml(myString); } catch (Exception ex) { System.IO.File.WriteAllText(@"C:\text.txt", myString + "\r\n\r\n" + ex.Message); throw ex; } 

myString是这个(在text.txt的输出中看到)

 <?xml version="1.0" encoding="utf-8"?> <Errors></Errors> 

text.txt出来看起来像这样:

 <?xml version="1.0" encoding="utf-8"?> <Errors></Errors> Data at the root level is invalid. Line 1, position 1. 

我需要这个XMLparsing,所以我可以看到,如果我有任何错误。

编辑

这个问题与标记不重复。 在这个问题中,提出问题的人使用LoadXml来parsingXML文件。 我正在parsing一个string,这是LoadXml的正确使用

隐藏的字符可能是BOM。 这个问题的解释和解决办法可以在这里find,詹姆斯·布兰金在这里find的答案根据詹姆斯·舒伯特。

尽pipe前面的答案确实去除了隐藏的字符,但它也删除了整个第一行。 更精确的版本将是:

 string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); if (xml.StartsWith(_byteOrderMarkUtf8)) { xml = xml.Remove(0, _byteOrderMarkUtf8.Length); } 

从Azure blob获取XSLT文件并将其加载到XslCompiledTransform对象时遇到此问题。 在我的机器上,文件看起来很好,但是在将其上传为blob并取回之后,添加了BOM字符。

使用Load()方法,它会解决问题。 查看更多

这里的问题是myString有这个标题行。 在第一行的开始处有一些隐藏的字符,或者行本身导致了错误。 我切掉了第一行,如下所示:

 xml.LoadXml(myString.Substring(myString.IndexOf(Environment.NewLine))); 

这解决了我的问题。

我认为这个问题是关于编码的。 这就是为什么删除第一行(使用编码字节)可能会解决问题。

在根级别的数据解决scheme是无效的。 第1行,XDocument.Parse(xmlString) 位置1.XDocument.Load( new MemoryStream( xmlContentInBytes ) );replace它XDocument.Load( new MemoryStream( xmlContentInBytes ) );

我注意到我的XMLstring看起来不错:

 <?xml version="1.0" encoding="utf-8"?> 

但在不同的文本编辑器编码它看起来像这样:

 ?<?xml version="1.0" encoding="utf-8"?> 

最后我不需要xmlstring,但是xml byte []。 如果您需要使用string,您应该在string中查找“不可见”字节,并使用编码来调整xml内容以便parsing或加载。

希望它会有所帮助

用不同的编码保存你的文件:

文件>保存文件为…>另存为UTF-8,无需签名。

在VS 2017中,您可以在保存button旁边find编码。