2011-08-12 221 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之一。