2011-08-12 219 views
11

我想抓取一个模式并根据我的xml进行验证。无效的URI:Uri字符串太长

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: 

并没有告诉我什么是最大长度或任何东西。任何人都曾经得到过这个?

+0

哪条线是发生在?这是什么xml在这里指? – Baz1nga

+2

http://stackoverflow.com/q/417142/684934似乎表明你将被限制在2000个字符左右。 – bdares

+0

xml是一个字符串,它包含需要验证的xml。它崩溃了XmlReader.Create() – chobo2

回答

10

问题是如果参数是字符串,xmlreader.create函数中的xml应该是uri。

例如。

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

在你的情况下,XML文件被解释为URL,因此它抱怨的限制。

看看这个MSDN文档XmlReader.Create Method 不同的重载方法..

我猜你应该使用TextReader之一。