相关疑难解决方法(0)

为什么"根级别的数据无效.第1行,位置1".对于XML文档?

我正在使用第三方DLL,它通过互联网传输XML文档.

为什么DLL会抛出以下异常?

根级别的数据无效.第1行,第1位.(有关完整的异常文本,请参见下文.)

以下是XML文档的前几行:

<?xml version="1.0" encoding="utf-8"?> <REQUEST>   <HEADER>
    <REQUESTID>8a5f6d56-d56d-4b7b-b7bf-afcf89cd970d</REQUESTID>
    <MESSAGETYPE>101</MESSAGETYPE>
    <MESSAGEVERSION>3.0.2</MESSAGEVERSION>
Run Code Online (Sandbox Code Playgroud)

例外:

System.ApplicationException was caught
      Message=Unexpected exception.
      Source=FooSDK
      StackTrace:
           at FooSDK.RequestProcessor.Send(String SocketServerAddress, Int32 port)
           at Foo.ExecuteRequest(Int32 messageID, IPayload payload, Provider prov)
           at Foo.SendOrder(Int32 OrderNo)
      InnerException: System.Xml.XmlException
           LineNumber=1
           LinePosition=1
           Message=Data at the root level is invalid. Line 1, position 1.
           Source=System.Xml
           SourceUri=""
           StackTrace:
                at System.Xml.XmlTextReaderImpl.Throw(Exception e)
                at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
                at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
                at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
                at System.Xml.XmlTextReaderImpl.Read()
                at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
                at System.Xml.XmlDocument.Load(XmlReader reader)
                at System.Xml.XmlDocument.LoadXml(String xml) …
Run Code Online (Sandbox Code Playgroud)

.net xml xmldocument xmlreader

23
推荐指数
2
解决办法
10万
查看次数

在Windows Server 2012中启动更改

编辑:我原本以为这与.NET Framework 4.5有关.原来它也适用于.NET Framework 4.0.

Windows Server 2012中的字符串处理方式发生了变化,我试图更好地理解它.似乎StartsWith的行为已经改变.使用.NET Framework 4.0和4.5可以重现该问题.

使用Windows 7上的.NET Framework 4.5,下面的程序打印"False,t".在Windows 2012 Server上,它会打印"True,t".

internal class Program
{
   private static void Main(string[] args)
   {
      string byteOrderMark = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
      Console.WriteLine("test".StartsWith(byteOrderMark));
      Console.WriteLine("test"[0]);
   }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,无论字符串内容如何,​​StartsWith(ByteOrderMark)都返回true.如果您有使用以下方法尝试剥离字节顺序标记的代码,此代码将在Windows 7上正常工作,但将在Windows 2012上打印"est".

internal class Program
{
  private static void Main(string[] args)
  {
     string byteOrderMark = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
     string someString = "Test";

     if (someString.StartsWith(byteOrderMark))
        someString = someString.Substring(1);

     Console.WriteLine("{0}", someString);
     Console.ReadKey();

  }
Run Code Online (Sandbox Code Playgroud)

}

我意识到如果你在字符串中有字节顺序标记,你已经做错了,但我们正在与具有此功能的遗留代码集成.我知道我可以通过以下方式解决这个具体问题,但我想更好地理解这个问题.

someString = someString.Trim(byteOrderMark[0]);
Run Code Online (Sandbox Code Playgroud)

Hans Passsant建议使用UTF8Encoding的构造函数,它允许我明确地告诉它发出UTF8标识符.我尝试了这个,但它给出了相同的结果.以下代码在Windows 7和Windows Server 2012之间的输出方面有所不同.在Windows 7上,它打印"Result:False".在Windows Server 2012上,它打印"Result:True".

  private static void …
Run Code Online (Sandbox Code Playgroud)

c# string unicode .net-4.5

13
推荐指数
1
解决办法
2480
查看次数

SolrNET - 根级别的数据无效。线路 1,位置 1

我在 localhost:8983/solr/global 上使用Solar:7.0.1

我使用SolrNET 0.8.1 和以下代码示例:

using SolrNet;
using Microsoft.Practices.ServiceLocation;

Startup.Init<SOLRModel>("http://localhost:8983/solr/global");
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SOLRModel>>();
var results = solr.Query(new SolrQuery("*:*&wt=xml")); // Throws Error Here.
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

我使用默认模式,也尝试了 techproducts 示例,得到相同的错误。

我可以导航到:http://localhost:8983/solr/global/select?q= 我得到正常的 JSON 响应。

使用&wt=xml给我格式良好的 XML 响应:

<?xml version="1.0" encoding="UTF-8" ?> 
- <response>
    - <lst name="responseHeader">
           <int name="status">0</int> 
          <int name="QTime">0</int> 
    - <lst name="params">
        <str name="q">*:*</str> 
        <str name="wt">xml</str> 
    </lst>
    </lst>
<result name="response" numFound="0" start="0" /> …
Run Code Online (Sandbox Code Playgroud)

c# solr solrnet

3
推荐指数
1
解决办法
1776
查看次数

标签 统计

c# ×2

.net ×1

.net-4.5 ×1

solr ×1

solrnet ×1

string ×1

unicode ×1

xml ×1

xmldocument ×1

xmlreader ×1