/// <summary> /// 读取元素所有的属性值 /// </summary> /// <param name="myReader">HTML文本读取器</param> internal virtual void ReadAttribute(HTMLTextReader myReader) { string strName = null; string strValue = null; while (!myReader.EOF) { myReader.SkipWhiteSpace(); // 若遇到元素结束标记则退出 if (myReader.StartWidth("/>")) { myReader.MoveStep(2); break; } if (myReader.Peek == '>' || myReader.Peek == '<') { myReader.MoveNext(); break; } // 读取属性名 strName = myReader.ReadWord( ); if (strName == null) { break; } strName = strName.ToLower(); // 读取属性值 myReader.SkipWhiteSpace(); if (myReader.EOF || myReader.Peek != '=') { strValue = "1"; } else { myReader.MoveNext(); strValue = myReader.ReadQuotMarkText(); } // 保存属性 if (System.Xml.XmlReader.IsName(strName)) { this.SetAttribute(strName, strValue); } } //while // 设置样式控制表属性 if (HasAttribute(StringConstAttributeName.Style)) { myStyle = new HTMLStyle(); myStyle.CSSString = GetAttribute(StringConstAttributeName.Style); } else { myStyle = null; } }
/// <summary> /// 从HTML文本读取器读取数据并加载子元素 /// </summary> /// <param name="myReader">HTML文本读取器</param> /// <returns>操作是否成功</returns> internal override bool InnerRead(HTMLTextReader myReader) { string strTagName; while (!myReader.EOF) { string strText = myReader.ReadString(); if (strText != null && this.CheckChildTagName(StringConstTagName.TextNode)) { HTMLTextNodeElement txt = new HTMLTextNodeElement(); txt.Text = strText; AppendChild(txt); } if (myReader.EOF) { break; } if (myReader.NextChar == '!') { if (myReader.StartWidth("<!--")) { myReader.MoveStep(4); strText = myReader.ReadUntil("-->"); if (strText != null) { if (this.CheckChildTagName(StringConstTagName.Comment)) { HTMLCommentElement com = new HTMLCommentElement(); com.Text = strText; AppendChild(com); } } myReader.MoveStep(3); continue; } else { myReader.MoveAfter('>'); myReader.SkipWhiteSpace(); continue; } } // else if( myReader.NextChar == '/') // { // if( myReader.StartWidth("</" + this.TagName )) // { // myReader.MoveAfter('>'); // break; // } // else // { // myReader.MoveAfter('>'); // continue; // } // } else if (myReader.NextChar == '/') { myReader.MoveStep(2); string vEndTag = myReader.PeekWord(); myReader.MoveStep(-2); // if( ( vEndTag != null ) && vEndTag.ToLower() == this.TagName ) // { // myReader.MoveAfter('>'); // break; // } if ((vEndTag != null) && (MeetEndTag(myReader, vEndTag.ToLower()))) { break; } else { myReader.MoveAfter('>'); continue; } } else if (myReader.NextChar == '?') { myReader.MoveAfter('>'); continue; } myReader.MoveNext(); strTagName = myReader.ReadWord(); if (strTagName != null) { strTagName = strTagName.ToLower(); if (!BeforeLoadTag(strTagName)) { myReader.MovePreTo('<'); break; } if (this.CheckChildTagName(strTagName)) { HTMLElement NewElement = myOwnerDocument.InnerCreateElement(strTagName, this); if (NewElement != null) { AppendChild(NewElement); NewElement.Read(myReader); } else { myReader.ReadToEndTag(strTagName); } } } } //while return(true); }