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字符.
Chr*_*ris 13
这里的问题是myString那个标题行.在第一行的开头有一些隐藏的字符,或者行本身导致错误.我切掉了第一行,如下:
xml.LoadXml(myString.Substring(myString.IndexOf(Environment.NewLine)));
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题.
我认为问题在于编码.这就是删除第一行(带编码字节)可能解决问题的原因.
我在根级别的数据解决方案无效.第1行,第1
位XDocument.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内容以进行解析或加载.
希望它会有所帮助
| 归档时间: |
|
| 查看次数: |
172672 次 |
| 最近记录: |