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 popContext() { if (namespaces) { namespaceSupport.PopContext(); } }
/// <summary> /// Write an end tag. /// Pass the event on down the filter chain for further processing. /// </summary> /// <param name="uri"> /// The Namespace URI, or the empty string if none /// is available. /// </param> /// <param name="localName"> /// The element's local (unprefixed) name (required). /// </param> /// <param name="qName"> /// The element's qualified (prefixed) name, or the /// empty string is none is available. This method will /// use the qName as a template for generating a prefix /// if necessary, but it is not guaranteed to use the /// same qName. /// </param> /// <exception cref="SAXException"> /// If there is an error /// writing the end tag, or if a handler further down /// the filter chain raises an exception. /// </exception> /// <seealso cref="IContentHandler.EndElement" /> public override void EndElement(string uri, string localName, string qName) { if ( !(_htmlMode && (uri.Equals("http://www.w3.org/1999/xhtml") || uri.Equals("")) && (qName.Equals("area") || qName.Equals("base") || qName.Equals("basefont") || qName.Equals("br") || qName.Equals("col") || qName.Equals("frame") || qName.Equals("hr") || qName.Equals("img") || qName.Equals("input") || qName.Equals("isindex") || qName.Equals("link") || qName.Equals("meta") || qName.Equals("param")))) { Write("</"); WriteName(uri, localName, qName, true); Write('>'); } if (_elementLevel == 1) { Write('\n'); } _cdataElement = false; base.EndElement(uri, localName, qName); _nsSupport.PopContext(); _elementLevel--; }