public virtual void EndElement(string elname) { IContentHandler handler = _contentHandler; if (!_namespaces) { handler.EndElement("", "", elname); return; } // following code added by MHK to fix bug Saxon 6.1/013 if (_prefixStack.ProcessName(elname, _nsTemp, false) == null) { // shouldn't happen _errorHandler.Error(new SAXParseException("undeclared name prefix in: " + elname, this)); _nsTemp[0] = _nsTemp[1] = ""; elname = elname.Substring(elname.IndexOf(':') + 1); } handler.EndElement(_nsTemp[0], _nsTemp[1], elname); // previous code (clearly wrong): handler.endElement ("", "", elname); // end of MHK addition IEnumerator prefixes = _prefixStack.GetDeclaredPrefixes().GetEnumerator(); while (prefixes.MoveNext()) { handler.EndPrefixMapping((string)prefixes.Current); } _prefixStack.PopContext(); }
internal void endElement(string elname) { IContentHandler handler = contentHandler; if (!namespaces) { handler.EndElement("", "", elname); return; } string localName = string.Empty; string uri = string.Empty; processElement(elname, out localName, out uri); handler.EndElement(uri, localName, elname); ArrayList declared = namespaceSupport.GetDeclaredPrefixes(); foreach (string prefix in declared) { handler.EndPrefixMapping(prefix); } popContext(); }
/// <summary> /// Write out the list of Namespace declarations. /// </summary> /// <exception cref="SAXException"> /// This method will throw /// an IOException wrapped in a SAXException if /// there is an error writing the Namespace /// declarations. /// </exception> private void WriteNSDecls() { IEnumerable prefixes = _nsSupport.GetDeclaredPrefixes(); foreach (string prefix in prefixes) { string uri = _nsSupport.GetUri(prefix); if (uri == null) { uri = ""; } char[] ch = uri.ToCharArray(); Write(' '); if ("".Equals(prefix)) { Write("xmlns=\""); } else { Write("xmlns:"); Write(prefix); Write("=\""); } WriteEsc(ch, 0, ch.Length, true); Write('\"'); } }