Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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);
        }