From: Oleg T. <he...@us...> - 2004-11-03 14:17:55
|
Update of /cvsroot/mvp-xml/XInclude/v1/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17141/v1/src Modified Files: XIncludingReader.cs Log Message: Fixed empty base URI bug. Index: XIncludingReader.cs =================================================================== RCS file: /cvsroot/mvp-xml/XInclude/v1/src/XIncludingReader.cs,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- XIncludingReader.cs 3 Nov 2004 12:55:41 -0000 1.26 +++ XIncludingReader.cs 3 Nov 2004 14:17:36 -0000 1.27 @@ -9,6 +9,7 @@ using System.Text; using System.Security; using System.Collections; +using System.Reflection; using Mvp.Xml.Common; using Mvp.Xml.Common.XPath; @@ -93,7 +94,13 @@ _nameTable = reader.NameTable; _keywords = new XIncludeKeywords(NameTable); - _topBaseUri = new Uri(_reader.BaseURI); + if (_reader.BaseURI != "") + _topBaseUri = new Uri(_reader.BaseURI); + else + { + _relativeBaseUri = false; + _topBaseUri = new Uri(Assembly.GetExecutingAssembly().Location); + } _readers = new Stack(); _state = XIncludingReaderState.Default; } @@ -641,10 +648,8 @@ case XIncludingReaderState.ExposingXmlBaseAttr: case XIncludingReaderState.ExposingXmlBaseAttrValue: if (_reader.BaseURI == String.Empty) - { - //No Base URI? Use previous one's. - //TODO:How come? - return ((XmlReader)_readers.Peek()).BaseURI; + { + return String.Empty; } if (_relativeBaseUri) { @@ -1095,10 +1100,11 @@ Uri includeLocation; try { - if (_xmlResolver == null) - includeLocation = new Uri(new Uri(_reader.BaseURI), href, false); + Uri baseURI = _reader.BaseURI==""? _topBaseUri : new Uri(_reader.BaseURI); + if (_xmlResolver == null) + includeLocation = new Uri(baseURI, href, false); else - includeLocation = _xmlResolver.ResolveUri(new Uri(_reader.BaseURI), href); + includeLocation = _xmlResolver.ResolveUri(baseURI, href); } catch(UriFormatException ufe) { @@ -1444,12 +1450,14 @@ /// </summary> private void CheckLoops(Uri url, string xpointer) { - //Check circular inclusion - if (new Uri(_reader.BaseURI).Equals(url)) + //Check circular inclusion + Uri baseUri = _reader.BaseURI==""? _topBaseUri : new Uri(_reader.BaseURI); + if (baseUri.Equals(url)) ThrowCircularInclusionError(_reader, url); foreach (XmlReader r in _readers) - { - if (new Uri(r.BaseURI).Equals(url)) + { + baseUri = r.BaseURI==""? _topBaseUri : new Uri(r.BaseURI); + if (baseUri.Equals(url)) ThrowCircularInclusionError(_reader, url); } } |