示例#1
0
 private void Property(HtmlNodeProperty property)
 {
     if (_node is HtmlDocNodeBeginTagA)
     {
         if (property.Name.ToLower() == "href")
             ((HtmlDocNodeBeginTagA)_node).Link = property.Value;
     }
     else if (_node is HtmlDocNodeTagImg)
     {
         if (property.Name.ToLower() == "src")
             ((HtmlDocNodeTagImg)_node).Link = property.Value;
         else if (property.Name.ToLower() == "class")
             ((HtmlDocNodeTagImg)_node).ClassList = zsplit.Split(property.Value, ' ', true);
     }
 }
示例#2
0
        private IEnumerable<HtmlNode> ReadOpenTag()
        {
            // read <
            _charStreamReader.ReadChar();
            HtmlNodeOpenTag openTag = new HtmlNodeOpenTag { Index = _htmlNodeIndex++, Line = _disableLineColumn ? 0 : _charStreamReader.Line,
                Column = _disableLineColumn ? 0 : _charStreamReader.Column };

            // read tag name
            openTag.Name = ReadTagName();

            //if (string.Compare(openTag.Name, "script", true) == 0)
            if (!_disableScriptTreatment && string.Compare(openTag.Name, "script", true) == 0)
                openTag.IsScript = true;

            yield return openTag;

            int code = _charStreamReader.PeekChar();
            if (code == -1)
                yield break;

            char car = (char)code;
            ReadSeparator();

            int line = 0;
            int column = 0;

            code = _charStreamReader.PeekChar();
            car = (char)code;
            // read properties
            if (car != '/' && car != '>')
            {
                while (true)
                {
                    // read property name
                    _stringBuilder.Remove(0, _stringBuilder.Length);
                    line = 0;
                    column = 0;
                    while (true)
                    {
                        code = _charStreamReader.PeekChar();
                        if (code == -1)
                            break;
                        car = (char)code;
                        if (car == ' ' || car == '\t' || car == '\r' || car == '\n' || car == '=' || car == '>' || car == '<' || car == '/')
                            break;
                        _stringBuilder.Append(car);
                        _charStreamReader.ReadChar();
                        if (line == 0)
                        {
                            line = _charStreamReader.Line;
                            column = _charStreamReader.Column;
                        }
                    }
                    if (_stringBuilder.Length == 0)
                        break;

                    HtmlNodeProperty property = new HtmlNodeProperty
                    {
                        Index = _htmlNodeIndex++,
                        Line = _disableLineColumn ? 0 : line,
                        Column = _disableLineColumn ? 0 : column
                    };

                    property.Name = _stringBuilder.ToString();
                    ReadSeparator();

                    if ((char)_charStreamReader.PeekChar() == '=')
                    {
                        _charStreamReader.ReadChar();
                        ReadSeparator();
                        HtmlReaderStringValue value = ReadStringValue();
                        property.Quote = value.Quote;
                        property.Value = value.Value;
                        ReadSeparator();
                    }
                    yield return property;
                }
            }

            code = _charStreamReader.PeekChar();
            car = (char)code;

            bool endTag = false;
            line = 0;
            column = 0;
            if (car == '/')
            {
                endTag = true;
                _charStreamReader.ReadChar();
                line = _charStreamReader.Line;
                column = _charStreamReader.Column;
                code = _charStreamReader.PeekChar();
                car = (char)code;
            }

            if (car == '>')
            {
                _charStreamReader.ReadChar();
                if (endTag)
                    yield return CreateHtmlNodeEndTag(openTag.Name, line, column);
                else if (_generateCloseTag)
                    yield return CreateHtmlNodeCloseTag(openTag.Name, _charStreamReader.Line, _charStreamReader.Column);
            }
        }