C# LoadXML string 根级别数据无效

问题描述 投票:0回答:1

我的问题很简单。我想确保 LoadXml() 适用于下面的字符串。

"<?xml version='1.0' encoding='UTF-8'?><PDB><TRANSACTION_TYPE><TYPE>ERROR</TYPE></TRANSACTION_TYPE><ERROR><DESCRIPTION>Bad Input. Please check.</DESCRIPTION></ERROR></PDB>"

我尝试了以下链接中的所有解决方案,但对我来说没有任何作用

C# using .NET Framework 4.5.2

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

为什么“根级别的数据无效。第1行,位置1。” XML 文档?

从 Windows Server 2012 中的更改开始

我正在调用一个我无法控制的API。

做完之后

string responseData = reader.ReadToEnd();

在responseData中我有这样的字符串

"<?xml version='1.0' encoding='UTF-8'?><PDB><TRANSACTION_TYPE><TYPE>ERROR</TYPE></TRANSACTION_TYPE><ERROR><DESCRIPTION>Bad Input. Please check.</DESCRIPTION></ERROR></PDB>"

我尝试了很多像下面这样的代码,无论我每次尝试什么

System.Xml.XmlException: Data at the root level is invalid. Line 1, position 201.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.LoadXml(String xml)

以下是示例代码。

using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
     {
       if (response.StatusCode == HttpStatusCode.Created)
       {
         using (var respStream = response.GetResponseStream())
           {
             using (var reader = new System.IO.StreamReader(respStream, true))
               {
                 string responseData = reader.ReadToEnd();
                 if (responseData.Contains(@"<TYPE>ERROR</TYPE>"))
                 {
                   string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
                    if (responseData.StartsWith(_byteOrderMarkUtf8, StringComparison.Ordinal))
                    {
                       responseData = responseData.Remove(0, _byteOrderMarkUtf8.Length);
                    }
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(responseData);
                    }
                }
            }
        }
    }
c# loadxml
1个回答
0
投票

从 XML 字符串中删除双引号,它就会被简单地解析。即:

void Main()
{
    XDocument.Parse(myxml).Dump();
}


static readonly string myxml = "<?xml version='1.0' encoding='UTF-8'?><PDB><TRANSACTION_TYPE><TYPE>ERROR</TYPE></TRANSACTION_TYPE><ERROR><DESCRIPTION>Bad Input. Please check.</DESCRIPTION></ERROR></PDB>";

您可以在 LinqPad(有免费版本)中粘贴并运行它。

© www.soinside.com 2019 - 2024. All rights reserved.