xml.LoadData - 根级别的数据无效.第1行,第1位

Chr*_*ris 66 c# xml wix xml-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;
}
Run Code Online (Sandbox Code Playgroud)

myString是这个(如输出中所示text.txt)

<?xml version="1.0" encoding="utf-8"?>
<Errors></Errors>
Run Code Online (Sandbox Code Playgroud)

text.txt 看起来像这样:

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

Data at the root level is invalid. Line 1, position 1.
Run Code Online (Sandbox Code Playgroud)

我需要解析这个XML,所以我可以看到我是否有任何错误.

编辑

这个问题不是标记的重复.在那个问题中,提出问题的人正在使用LoadXml解析XML文件.我正在解析一个字符串,这是正确使用的LoadXml

Ami*_*rin 102

隐藏的角色可能是BOM.可以在这里找到对问题和解决方案的解释,根据詹姆斯布兰金在这里找到的答案给詹姆斯舒伯特提供信用.

虽然前面的答案确实删除了隐藏的字符,但它也删除了整个第一行.更精确的版本是:

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

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

  • 与上述评论者有同样的问题.使用`xmlStartsWith(byteOrderMarkUtf8,StringComparison.Ordinal)`为我做了诀窍.感谢Hans Passant:/sf/answers/1364717511/ (6认同)
  • 不确定,我想我必须继续寻找,但当我这样做时_byteOrderMarkUtf8 ="".所以它没有抓住它.想法? (3认同)
  • 试过了,没有帮助。xml 来自 db (2认同)
  • 这为我解决了这个问题,非常感谢,我已经为此纠结了一段时间。 (2认同)

Rin*_*ngo 57

使用Load()方法代替,它将解决问题.看更多

  • 我正在使用XDocument.Load(),我遇到了问题. (13认同)
  • 我无法相信它神奇地解决了我的问题.. (5认同)

Chr*_*ris 13

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

xml.LoadXml(myString.Substring(myString.IndexOf(Environment.NewLine)));
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.

  • 一旦我收到此错误,结果是'?' 在开始.我只是用一个空格替换它并让它运行...如果您正在阅读的文件编码与您期望的编码不同,也可能会发生这种情况 (4认同)

paw*_*ciu 9

我认为问题在于编码.这就是删除第一行(带编码字节)可能解决问题的原因.

在根级别的数据解决方案无效.第1行,第1XDocument.Parse(xmlString)正在替换它XDocument.Load( new MemoryStream( xmlContentInBytes ) );

我注意到我的xml字符串看起来没问题:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

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

?<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

最后我不需要xml字符串而是xml byte [].如果需要使用字符串,则应在字符串中查找"不可见"字节,并使用编码调整xml内容以进行解析或加载.

希望它会有所帮助