无效的URI: URI字符串太长。

14
我正在尝试获取一个模式并根据我的XML进行验证。
  XmlReaderSetting settings = new System.Xml.XmlReaderSettings();
            settings.Schemas.Add(null, "http://example.com/myschema.xsd");
            settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler); 
            settings.ValidationType = ValidationType.Schema;
            settings.IgnoreWhitespace = false;
            XmlReader reader = XmlReader.Create(xml, settings);

我理解了

Invalid URI: The Uri string is too long


System.UriFormatException was unhandled   Message=Invalid URI: The Uri string is too long.   Source=System   StackTrace:
       at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
       at System.Uri..ctor(String uriString, UriKind uriKind)
       at System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
       at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
       at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
       at ConsoleApplication2.Program.Main(String[] args) in Program.cs:line 42
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()   InnerException:

没有告诉我最大长度是多少或其他任何信息。有人曾经遇到过这种情况吗?


2
https://dev59.com/XHRC5IYBdhLWcg3wFM_W 似乎表明你将被限制在大约2000个字符左右。 - user684934
崩溃发生在哪一行代码?这里的 XML 是什么意思? - Baz1nga
xml是一个字符串,它保存着需要验证的XML数据。当调用XmlReader.Create()函数时程序崩溃。 - chobo2
5
我曾经使用xmlDoc.Load而不是xmlDoc.LoadXml,遇到了类似的错误。它会将xml内容视为文件名/URI。 - NealWalters
1个回答

11
问题在于,如果参数是一个字符串,在您的xmlreader.create函数中的xml应该是一个uri。

例如:

XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);

在您的情况下,xml文件被解释为url,因此它抱怨限制。请查看XmlReader.Create Method的msdn文档以获取不同的重载方法。我猜想您应该使用TextReader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接