private void OutputTextAndTag(string qName, IAttributes attributes, bool close) { // If we're not already in an element to be transformed, first // echo the previous text... outWriter.Print(XMLUtils.EscapeXML(textToBeTransformed.ToString())); textToBeTransformed = new StringBuilder(); // ... then echo the new tag to outStream outWriter.Print('<'); if (close) { outWriter.Print('/'); } outWriter.Print(qName); if (attributes != null) { for (int i = 0; i < attributes.GetLength(); i++) { outWriter.Print(' '); outWriter.Print(attributes.GetQName(i)); outWriter.Print("=\""); outWriter.Print(XMLUtils.EscapeXML(attributes.GetValue(i))); outWriter.Print('"'); } } outWriter.Print(">\n"); }
public void SetAttributes(IAttributes attributes) { this.Clear(); length = attributes.GetLength(); if (length > 0) { data = new string[length * 5]; for (int i = 0; i < length; i++) { data[i * 5] = attributes.GetURI(i); data[i * 5 + 1] = attributes.GetLocalName(i); data[i * 5 + 2] = attributes.GetQName(i); data[i * 5 + 3] = attributes.GetType(i); data[i * 5 + 4] = attributes.GetValue(i); } } }
/// <summary> /// <para>Receive notification of the beginning of an element.</para><para>The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding endElement event for every startElement event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement event.</para><para>This event allows up to three name components for each element:</para><para><ol><li><para>the Namespace URI; </para></li><li><para>the local name; and </para></li><li><para>the qualified (prefixed) name. </para></li></ol></para><para>Any or all of these may be provided, depending on the values of the <b></b> and the <b></b> properties:</para><para><ul><li><para>the Namespace URI and local name are required when the namespaces property is <b>true</b> (the default), and are optional when the namespaces property is <b>false</b> (if one is specified, both must be); </para></li><li><para>the qualified name is required when the namespace-prefixes property is <b>true</b>, and is optional when the namespace-prefixes property is <b>false</b> (the default). </para></li></ul></para><para>Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): #IMPLIED attributes will be omitted. The attribute list will contain attributes used for Namespace declarations (xmlns* attributes) only if the <code></code> property is true (it is false by default, and support for a true value is optional).</para><para>Like characters(), attribute values may have characters that need more than one <code>char</code> value. </para><para><para>endElement </para><simplesectsep></simplesectsep><para>org.xml.sax.Attributes </para><simplesectsep></simplesectsep><para>org.xml.sax.helpers.AttributesImpl </para></para> /// </summary> public void StartElement(string uri, string localName, string qName, IAttributes atts) { var element = new XElement(XName.Get(localName, uri)); var parent = elementStack.Empty() ? null : elementStack.Peek(); if (parent == null) { document.Add(element); } else { parent.Add(element); } var attrCount = atts.GetLength(); for (var i = 0; i < attrCount; i++) { var name = XName.Get(atts.GetLocalName(i), atts.GetURI(i)); var attr = new XAttribute(name, atts.GetValue(i)); element.Add(attr); } elementStack.Push(element); }
/// <summary> /// Element构造函数 /// </summary> /// <param name="uri">资源地址</param> /// <param name="localName">本地名称(uri有值时tagname为此值)</param> /// <param name="qName">q名称(uri为空时tagname为此值)</param> /// <param name="attributes">特性集合,可以为null</param> /// <param name="locator">定位可以为null</param> public Element(string uri, string localName, string qName, IAttributes attributes, ILocator locator) { this.uri = uri; tagName = string.IsNullOrEmpty(uri) ? qName : localName; if (attributes != null) { for (var i = 0; i < attributes.GetLength(); i++) { var attributeUri = attributes.GetUri(i); var name = string.IsNullOrEmpty(attributeUri) ? attributes.GetQName(i) : attributes.GetLocalName(i); var value = attributes.GetValue(i); AttributeMap[ComposeMapKey(attributeUri, name)] = new Attribute(name, value, attributeUri); } } if (locator != null) { line = locator.GetLineNumber(); //.LineNumber; column = locator.GetColumnNumber(); //.ColumnNumber; } }