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编码。