public virtual void StartElement(string uri, string localName, string qName, IAttributes atts) { if (_contentHandler != null) { _contentHandler.StartElement(uri, localName, qName, atts); } }
internal void startElement(string elname) { IContentHandler handler = contentHandler; string localName = string.Empty; string ns = string.Empty; if (!attributes) { } else if (namespaces) { // now we can patch up namespace refs; we saw all the // declarations, so now we'll do the Right Thing for (int i = 0; i < attributeCount; i++) { AttributeData att = attributeData[i]; // NS prefix declaration? if (att.Declaration && !xmlNames) { continue; } // it's not a NS decl; patch namespace info items processAttribute(att.QName, out localName, out ns); att.Uri = ns; att.LocalName = localName; for (int j = 0; j < i; j++) { if (att.Uri == attributeData[j].Uri && att.LocalName == attributeData[j].LocalName) { if (att.Uri != null && att.Uri != "") { fatal("duplicate attribute {" + att.Uri + "}" + att.LocalName); } else { fatal("duplicate attribute \"" + att.LocalName + "\""); } } } } } // save element name so attribute callbacks work elementName = elname; if (namespaces) { processElement(elname, out localName, out ns); handler.StartElement(ns, localName, elname, this); } else { handler.StartElement("", "", elname, this); } // elements with no attributes are pretty common! if (attributes) { attributeCount = 0; attributes = false; } }
public virtual void StartElement(string elname) { IContentHandler handler = _contentHandler; if (_attributeCount == 0) { _prefixStack.PushContext(); } // save element name so attribute callbacks work _elementName = elname; if (_namespaces) { // Expand namespace prefix for all attributes if (_attributeCount > 0) { for (int i = 0; i < _attributeNames.Count; i++) { var aname = (string)_attributeNames[i]; if (aname.IndexOf(':') > 0) { if (_xmlNames && aname.StartsWith("xmlns:")) { _attributeNamespaces.Add(""); _attributeLocalNames.Add(aname); } else if (_prefixStack.ProcessName(aname, _nsTemp, true) == null) { _errorHandler.Error(new SAXParseException("undeclared name prefix in: " + aname, this)); // recovery action: substitute a name in default namespace _attributeNamespaces.Add(""); _attributeLocalNames.Add(aname.Substring(aname.IndexOf(':') + 1)); } else { _attributeNamespaces.Add(_nsTemp[0]); _attributeLocalNames.Add(_nsTemp[1]); } } else { _attributeNamespaces.Add(""); _attributeLocalNames.Add(aname); } // check uniquess of the attribute expanded name for (int j = 0; j < i; j++) { if (_attributeNamespaces[i] == _attributeNamespaces[j] && _attributeLocalNames[i] == _attributeLocalNames[j]) { _errorHandler.Error(new SAXParseException("duplicate attribute name: " + _attributeLocalNames[j], this)); } } } } if (_prefixStack.ProcessName(elname, _nsTemp, false) == null) { _errorHandler.Error(new SAXParseException("undeclared name prefix in: " + elname, this)); _nsTemp[0] = _nsTemp[1] = ""; // recovery action elname = elname.Substring(elname.IndexOf(':') + 1); } handler.StartElement(_nsTemp[0], _nsTemp[1], elname, this); } else { handler.StartElement("", "", elname, this); } // elementName = null; // elements with no attributes are pretty common! if (_attributeCount != 0) { _attributeNames.Clear(); _attributeNamespaces.Clear(); _attributeLocalNames.Clear(); _attributeValues.Clear(); _attributeCount = 0; } _nspending = false; }