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