2010-05-24 44 views
1

分辨率我试图用XDocument.Parse(string)解析的http://feeds.feedburner.com/riabiz内容(因为它可以让在DB缓存)XDocument.Parse失败,由于分辨率的错误,如何禁用

然而,保持与下面的堆栈失败在尝试解析该XML中的某些URI时进行跟踪。

我不关心验证或任何XML废话,我只是想分析结构。如何在不使用此URI解析的情况下使用XDocument?

System.ArgumentException: The specified path is not of a legal form (empty). 
    at System.IO.Path.InsecureGetFullPath (System.String path) [0x00000] in 
:0 
    at System.IO.Path.GetFullPath (System.String path) [0x00000] in :0 
    at System.Xml.XmlResolver.ResolveUri (System.Uri baseUri, System.String 
relativeUri) [0x00000] in :0 
    at System.Xml.XmlUrlResolver.ResolveUri (System.Uri baseUri, System.String 
relativeUri) [0x00000] in :0 
    at Mono.Xml2.XmlTextReader.ReadStartTag() [0x00000] in :0 
    at Mono.Xml2.XmlTextReader.ReadContent() [0x00000] in :0 
    at Mono.Xml2.XmlTextReader.Read() [0x00000] in :0 
    at System.Xml.XmlTextReader.Read() [0x00000] in :0 
    at Mono.Xml.XmlFilterReader.Read() [0x00000] in :0 
    at Mono.Xml.XmlFilterReader.Read() [0x00000] in :0 
    at System.Xml.XmlReader.ReadEndElement() [0x00000] in :0 
    at System.Xml.Linq.XElement.LoadCore (System.Xml.XmlReader r, LoadOptions 
options) [0x00000] in :0 
    at System.Xml.Linq.XNode.ReadFrom (System.Xml.XmlReader r, LoadOptions 
options) [0x00000] in :0 
...

回答

3

这里是我如何停止的XML解析:

var r = new System.Xml.XmlTextReader(new StringReader(xml)); 
r.XmlResolver = new Resolver(); 

var doc = XDocument.Load(r); 

class Resolver : System.Xml.XmlResolver { 
    public override Uri ResolveUri (Uri baseUri, string relativeUri) 
    { 
     return baseUri; 
    } 
    public override object GetEntity (Uri absoluteUri, string role, Type type) 
    { 
     return null; 
    }  
    public override ICredentials Credentials { 
     set { 
     } 
    } 
} 

请让我知道,如果这是正确的。

2

你可以简单地清除XmlResolver

r.XmlResolver = null; 

的推荐方法创建XmlReader使用通用XmlReader.Create(),在这种情况下:

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.XmlResolver = null; 
XmlReader r = XmlReader.Create(new StringReader(xml), settings);  

使用.NET 4.0或更高版本,你也可以完全禁用DTD的处理(即URI来自哪里):

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.DtdProcessing = DtdProcessing.Ignore; 
XmlReader r = XmlReader.Create(new StringReader(xml), settings);  
相关问题